View Full Version : MeGUI development
Pages :
1
2
[
3]
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
Doom9
21st November 2005, 18:34
what commandline do you use when using the csc 2.0 compiler to compile binaries against the 1.1 runtime?
charleski
21st November 2005, 19:09
I wrote up the method I used to compile using .NET 2.0 csc and .NET 1.1 libs and includes here (http://homepages.nildram.co.uk/~cajking/CompilingFor1.1.zip).
Both my machines have been upgraded to shiny new .NET 2.0, so I can't test this to be sure it works though. The binary I created is here (http://homepages.nildram.co.uk/~cajking/meguiLevelPatch_NET1.1libs.exe). Could you test that and make sure it works?
Sharktooth
21st November 2005, 19:55
what commandline do you use when using the csc 2.0 compiler to compile binaries against the 1.1 runtime?
i use your .bat.
Sharktooth
21st November 2005, 19:57
Reported on IRC:
(18:25:29) X_plode: http://putfile.com/pic.php?pic=11/32411242663.png&s=x12
18:29
(18:31:27) X_plode: http://s47.yousendit.com/d.aspx?id=3VPEUXA3MJFMR21HIHIJ5VDZDT
18:34
(18:37:28) X_plode: the error comes when i try to open the config after loading the avs file...opening the config before opening the avs there is no error
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ArgumentException: '0' is not a valid value for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'.
at System.Windows.Forms.NumericUpDown.set_Value(Decimal value)
at MeGUI.x264ConfigurationDialog.set_CodecSettings(x264Settings value)
at MeGUI.x264ConfigurationDialog.EnforceLevel(x264Settings inputSettings)
at MeGUI.x264ConfigurationDialog.showCommandLine()
at MeGUI.x264ConfigurationDialog.avcLevel_SelectedIndexChanged(Object sender, EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
at MeGUI.x264ConfigurationDialog.set_CodecSettings(x264Settings value)
at MeGUI.MeGUI.videoConfigButton_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
megui-x264
Assembly Version: 1.0.2151.32470
Win32 Version: 1.0.2151.32470
CodeBase: file:///C:/x264/megui-x264.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.573
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
Doom9
21st November 2005, 20:00
i use your .bat.But you have to modify it, won't you? After all in my box the bat creates 1.1 binaries.
charleski
21st November 2005, 21:15
@Sharktooth: Ok, I'll take a look at that. I also noticed on scanning the code again that the levels validation misses the width and height restrictions, so I'm putting that in and altering the function call a bit (I think I was trying to be too clever at one point).
@doom9: You need to change a few environment variables. I modified the vsvars32 batch file so it should set them correctly for you, see my post above. The actual compile.bat stays the same.
Sharktooth
21st November 2005, 21:50
yeah. i kept your .bat unmodified and once you set the vars in the right way everything works as it should.
EDIT: i'll ask bobor if he can setup an SVN server for MeGUI... working with diffs is much easier.
charleski
21st November 2005, 23:42
Ok, I fixed a silly error and made a few other changes to the logic - all detailed in the changelog. I also added in the dimension restrictions.
Full project dump is here (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-Levels0.3.rar)
Modified files are here (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-LevelModFiles0.3.rar)
Version compiled for .Net 1.1 is here (http://homepages.nildram.co.uk/~cajking/meguiLevelPatch0.3_NET1.1libs.exe).
EDIT: i'll ask bobor if he can setup an SVN server for MeGUI... working with diffs is much easier.That would be nice.
falcon2000eg
22nd November 2005, 01:59
Version compiled for .Net 1.1 is here (http://homepages.nildram.co.uk/~cajking/meguiLevelPatch0.3_NET1.1libs.exe).
i downloaded it and it ask me to install .net 2
falcon2000eg
22nd November 2005, 02:12
The new build of sharktooth crashed when I press config button after loadindg the movie not before that.
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.ArgumentException: '0' is not a valid value for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'.
at System.Windows.Forms.NumericUpDown.set_Value(Decimal value)
at MeGUI.x264ConfigurationDialog.set_CodecSettings(x264Settings value)
at MeGUI.x264ConfigurationDialog.EnforceLevel(x264Settings inputSettings)
at MeGUI.x264ConfigurationDialog.showCommandLine()
at MeGUI.x264ConfigurationDialog.avcLevel_SelectedIndexChanged(Object sender, EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
at MeGUI.x264ConfigurationDialog.set_CodecSettings(x264Settings value)
at MeGUI.MeGUI.videoConfigButton_Click(Object sender, EventArgs e)
at System.Windows.Forms.Control.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnClick(EventArgs e)
at System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
at System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ButtonBase.WndProc(Message& m)
at System.Windows.Forms.Button.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///d:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
megui-x264
Assembly Version: 1.0.2151.32470
Win32 Version: 1.0.2151.32470
CodeBase: file:///D:/Program%20Files/x264/megui-x264.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///d:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///d:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///d:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///d:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
charleski
22nd November 2005, 02:20
i downloaded it and it ask me to install .net 2
Gah, I probably missed something in the environment, i'll take another look.
The new build of sharktooth crashed when I press config button after loadindg the movie not before that.Yes, this bug should be fixed now.
[Edit: Ok, I altered some of the environment variables that were probably pointing to the wrong place and re-complied. Can you try downloading the program again and running it? The link remains the same (http://homepages.nildram.co.uk/~cajking/meguiLevelPatch0.3_NET1.1libs.exe)
Sharktooth
22nd November 2005, 03:54
x264_only conditional compiling is still broken... please add the fix i posted above (and check if there are other broken things due to conditional compiling)
Form1.cs(2420,43): error CS0103: The name 'hres' does not exist in the class or
namespace 'MeGUI.MeGUI'
Form1.cs(2420,49): error CS0103: The name 'vres' does not exist in the class or
namespace 'MeGUI.MeGUI'
Files moved here: http://forum.doom9.org/showthread.php?p=741271#post741271
falcon2000eg
22nd November 2005, 03:58
same problem charleski
Sharktooth
22nd November 2005, 04:01
my bins should work (they're in my previous post).
falcon2000eg
22nd November 2005, 04:08
Thanks, it worked i will try it now with your new build rev.368c
i will wait there changes in the SVN
waw :cool: 0 time wait
Sharktooth
22nd November 2005, 04:16
372 is up, it already includes the patched MeGUI-x264.
Doom9
22nd November 2005, 10:55
hmm... I never gave you guys the "c" code.. it contains some improvements in the job-moving functions. I guess now I have to hack that into the latest sources instead.
charleski
22nd November 2005, 15:04
x264_only conditional compiling is still broken... please add the fix i posted above (and check if there are other broken things due to conditional compiling)Grr, I'm an idiot, sorry, I only copied half the relevant lines instead of the full set. I've been through all the modified files, and that's the only spot where there's a call to the new functions outside an #ifdef FULL... block.
same problem charleskiSeems like I'll have to build a VM and try to work out what I'm doing wrong with the libraries, sorry.
Doom9
22nd November 2005, 17:31
Here's the fix for the up/down crash. Replace the code inside upButton_Click with the following:
if (queueListView.SelectedItems.Count > 0)
{
MoveListViewItem(ref this.queueListView, true);
updateJobPositions();
}
likewise, replace the code inside downButton_Click with the following:
if (queueListView.SelectedItems.Count > 0)
{
MoveListViewItem(ref this.queueListView, false);
updateJobPositions();
}
This doesn't take care of the weird activity when you select multiple jobs and press up/down, but at least there are no crashes anymore.
Chainmax
22nd November 2005, 18:58
Sharktooth, is automated 3-pass with turbo fixed in this latest release?
Sharktooth
22nd November 2005, 19:15
not yet and btw it's auto 3 pass that's b0rked even without turbo.
Sharktooth
22nd November 2005, 19:48
The following files include the doom9 patch ( http://forum.doom9.org/showthread.php?p=741234#post741234 )
moved here: http://forum.doom9.org/showthread.php?p=742099#post742099
Chainmax
22nd November 2005, 21:18
not yet and btw it's auto 3 pass that's b0rked even without turbo.
I see. Any idea what is causing the flaw?
charleski
22nd November 2005, 21:21
I can take a look into automated 3-pass, though I only use 2-pass and after searching the forum I see that no-one's specified exactly what problem they're having. It seems to be a flaw in the command-line generation, though.
Chainmax
22nd November 2005, 23:12
Sharktooth made a post somewhere explaining the problem. I used to use 2-pass as well, but seeing how fast first pass is a lot faster than a regular pass and doesn't result in a noticeable quality drop, it's like getting 2.9-pass quality at 2.1-pass encoding time, so to speak. That's why I switched to that mode.
charleski
23rd November 2005, 00:21
Yeah, the commandline shown in the interface isn't right when in 3-pass mode, but I generated some jobs and looked at the XML - it seems fine to me, so the actual commandlines passed to x264 appear correct.
foxyshadis
23rd November 2005, 02:08
Sharktooth made a post somewhere explaining the problem. I used to use 2-pass as well, but seeing how fast first pass is a lot faster than a regular pass and doesn't result in a noticeable quality drop, it's like getting 2.9-pass quality at 2.1-pass encoding time, so to speak. That's why I switched to that mode.
Vaguely related: Fast first pass doesn't seem to disable some of the newer options. (I have no idea which could be appropriately disabled.) A recent encode with b-rdo, trellis, adaptive quant, and b-adaptive, seemed to have almost exactly the same framerate (from a pre-filtered lossless video) between passes.
It might be worth going back now that so many new options are available and testing again for minimum lossage.
charleski
23rd November 2005, 02:20
That's interesting. can you recreate the job that caused this behaviour and post the XML? (If you close MeGUI before executing the jobs they'll be saved in the jobs folder)
Certainly I've always found 1st-pass turbo to run about 4 times faster than the 2nd pass.
foxyshadis
23rd November 2005, 05:47
I keep all old jobs around (no particular reason) so I just pulled the xml. The settings all show up there, but that depends on if b-rdo is even activated for subme 1 and whether trillis is activating.
<?xml version="1.0"?>
<Job xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:type="VideoJob">
<Input>C:\video\work\mark3.avs</Input>
<Output />
<Name>job33</Name>
<Priority>0</Priority>
<Status>5</Status>
<Position>32</Position>
<Start>2005-11-21T10:36:29.7118750-08:00</Start>
<End>2005-11-21T10:49:19.3056250-08:00</End>
<FPS>9.98636964703489</FPS>
<Commandline>"x264.exe" --pass 1 --bitrate 700 --stats "C:\video\work\x264.log" --aq-strength 0.7 --bframes 3 --b-pyramid --filter 1,1 --subme 1 --b-rdo --weightb --trellis 1 --analyse none --me dia --merange 20 --progress --no-psnr --output NUL "C:\video\work\mark3.avs" </Commandline>
<Settings xsi:type="x264Settings">
<EncodingMode>2</EncodingMode>
<BitrateQuantizer>700</BitrateQuantizer>
<KeyframeInterval>250</KeyframeInterval>
<NbBframes>3</NbBframes>
<MinQuantizer>10</MinQuantizer>
<MaxQuantizer>51</MaxQuantizer>
<SARX>0</SARX>
<SARY>0</SARY>
<Turbo>true</Turbo>
<V4MV>false</V4MV>
<QPel>false</QPel>
<Trellis>false</Trellis>
<CreditsQuantizer>40</CreditsQuantizer>
<FourCCs>
<string>VSSH</string>
<string>x264</string>
<string>avc1</string>
</FourCCs>
<Logfile>C:\video\work\x264.log</Logfile>
<CustomEncoderOptions />
<FourCC>1</FourCC>
<Zones />
<AQStrength>0.7</AQStrength>
<AQSensitivity>15.0</AQSensitivity>
<MixedRefs>false</MixedRefs>
<X264Trellis>1</X264Trellis>
<NbRefFrames>1</NbRefFrames>
<AlphaDeblock>1</AlphaDeblock>
<BetaDeblock>1</BetaDeblock>
<SubPelRefinement>0</SubPelRefinement>
<MaxQuantDelta>4</MaxQuantDelta>
<TempQuantBlur>0</TempQuantBlur>
<BframePredictionMode>2</BframePredictionMode>
<VBVBufferSize>-1</VBVBufferSize>
<VBVMaxBitrate>-1</VBVMaxBitrate>
<METype>0</METype>
<MERange>20</MERange>
<NbThreads>1</NbThreads>
<MinGOPSize>25</MinGOPSize>
<Profile>2</Profile>
<Level>15</Level>
<IPFactor>1.4</IPFactor>
<PBFactor>1.3</PBFactor>
<ChromaQPOffset>0</ChromaQPOffset>
<VBVInitialBuffer>0.9</VBVInitialBuffer>
<BitrateVariance>1.0</BitrateVariance>
<QuantCompression>0.6</QuantCompression>
<TempComplexityBlur>20</TempComplexityBlur>
<TempQuanBlurCC>0.5</TempQuanBlurCC>
<SCDSensitivity>40</SCDSensitivity>
<BframeBias>0</BframeBias>
<Deblock>true</Deblock>
<Cabac>true</Cabac>
<WeightedBPrediction>true</WeightedBPrediction>
<AdaptiveBFrames>true</AdaptiveBFrames>
<BFramePyramid>true</BFramePyramid>
<BRDO>true</BRDO>
<ChromaME>true</ChromaME>
<P8x8mv>false</P8x8mv>
<B8x8mv>false</B8x8mv>
<I4x4mv>false</I4x4mv>
<I8x8mv>false</I8x8mv>
<P4x4mv>false</P4x4mv>
<AdaptiveDCT>false</AdaptiveDCT>
<Lossless>false</Lossless>
<QuantizerMatrix>C:\Program Files\music-video\x264\eqm_avc_hr.cfg</QuantizerMatrix>
<QuantizerMatrixType>0</QuantizerMatrixType>
</Settings>
<OutputType>0</OutputType>
<DesiredSize>0</DesiredSize>
<NumberOfFrames>7670</NumberOfFrames>
<Framerate>23.976043137696813</Framerate>
</Job>
Sharktooth
23rd November 2005, 13:28
for what concerns turbo mode the (in theory) b-rdo can be "disabled" as well as mixed-refs (not sure about trellis).
charleski
23rd November 2005, 19:32
I'm still struggling to get MeGUI compiled for .NET 1.1. Could you take a look at this environment Sharktooth and see what I'm doing wrong?
Here are the environment variables in the command shell I use to compile:
ALLUSERSPROFILE=C:\Documents and Settings\All Users
APPDATA=C:\Documents and Settings\******\Application Data
CLASSPATH=C:\Program Files\Java\jre1.5.0_05\lib\ext\QTJava.zip
CLIENTNAME=Console
CommonProgramFiles=C:\Program Files\Common Files
COMPUTERNAME=******
ComSpec=C:\WINDOWS\system32\cmd.exe
DevEnvDir=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE
FP_NO_HOST_CHECK=NO
FrameworkDir=C:\WINDOWS\Microsoft.NET\Framework
FrameworkSDKDir=C:\Program Files\Microsoft Visual Studio 8\SDK\v1.1
FrameworkVersion=v1.1.4322
HOMEDRIVE=C:
HOMEPATH=\Documents and Settings\******
INCLUDE=C:\Program Files\Microsoft Visual Studio 8\SDK\v1.1\INCLUDE;
LIB=C:\Program Files\Microsoft Visual Studio 8\SDK\v1.1\LIB;
LIBPATH=C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322
LOGONSERVER=\\*******
NUMBER_OF_PROCESSORS=2
OS=Windows_NT
Path=C:\Program Files\Microsoft Visual Studio 8\Common7\IDE;C:\Program Files\Microsoft Visual Studio 8\VC\BIN;C:\Program Files\Microsoft Visual Studio 8\Common7\Tools;C:\Program Files\Microsoft Visual Studio 8\SDK\v2.0\bin;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322;C:\Program Files\Microsoft Visual Studio 8\VC\VCPackages;C:\Perl\bin\;C:\WINDOWS\system32;C:\WINDOWS;C:\WINDOWS\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\Common Files\Adobe\AGL;C:\Program Files\Microsoft SQL Server\90\Tools\binn\;C:\Program Files\QuickTime\QTSystem\;C:\Program Files\AviApps\YAMB;C:\Program Files\AviApps\x264;C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727;C:\Program Files\Visual Studio 2005 SDK\2005.10\VisualStudioIntegration\Tools\Bin
PATHEXT=.COM;.EXE;.BAT;.CMD;.VBS;.VBE;.JS;.JSE;.WSF;.WSH
PROCESSOR_ARCHITECTURE=x86
PROCESSOR_IDENTIFIER=x86 Family 15 Model 2 Stepping 9, GenuineIntel
PROCESSOR_LEVEL=15
PROCESSOR_REVISION=0209
ProgramFiles=C:\Program Files
PROMPT=$P$G
QTJAVA=C:\Program Files\Java\jre1.5.0_05\lib\ext\QTJava.zip
SESSIONNAME=Console
SystemDrive=C:
SystemRoot=C:\WINDOWS
TEMP=C:\DOCUME~1\******\LOCALS~1\Temp
TMP=C:\DOCUME~1\******\LOCALS~1\Temp
USERDOMAIN=******
USERNAME=******
USERPROFILE=C:\Documents and Settings\******
VCINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8\VC
VS80COMNTOOLS=C:\Program Files\Microsoft Visual Studio 8\Common7\Tools\
VSINSTALLDIR=C:\Program Files\Microsoft Visual Studio 8
windir=C:\WINDOWS
Or just post the environment variables you use so i can compare them.
Thanks.
acidsex
23rd November 2005, 21:51
Any chance that the Avisynth creator to support more than just DGIndex files? My reasoning is I have some DV-avi files I would like to encode using MeGUI and sometimes I have a rather large batch of them and it is very tedious having to create an avs by typing. Even if we could get a generic "Direct Show Source" template would save me a great deal of time. Would this be difficult to implement Doom9?
charleski
23rd November 2005, 22:40
Yeah, I was thinking of adding in more functionality for the avs creator along with a couple of other enhancements I've written. Give me a couple of days.
Kostarum Rex Persia
23rd November 2005, 23:24
Question for MeGUI developers: is it possible(in next builds) to introduce AVI and MPEG2 input in MeGUI? (curently,only AVS input)
I don't have knowledge,nor time to learn Avisynth scripting,so I be very delighted if you,guys,make MeGUI more friendship for use.
charleski
23rd November 2005, 23:58
Well the best way to do that is to modify the avs creator as acidsex described so that it can accept avis and modify the DGindexer so that it will accept mpeg2s. It would be a mistake to remove avisynth from the input stream.
Kostarum Rex Persia
24th November 2005, 00:03
Great,but when I may expect new revision of MeGUI with MPEG2 and AVI input.Until new year,or perhaps sooner?
Sirber
24th November 2005, 00:10
Invest the asking time to some coding ;) Shouldn't be hard adding that to MeGUI...
Kostarum Rex Persia
24th November 2005, 00:19
Ok,but from where to start.Can you advice me,Sirber.
Sirber
24th November 2005, 00:33
1) http://msdn.microsoft.com/vstudio/express/visualcsharp/
2) http://www.rarlab.com/rar/wrar351.exe
3) http://forum.doom9.org/MeGUI-src.0.2.3.1b.rar
3) Extract the sources
4) Open the sources with C#
5) Find the input manager class and add your stuff
6) Post your modifications
charleski
24th November 2005, 00:41
I'm writing the code right now actually :p, but I have a few other bits i want to add as well, so give it a day or two.
[edit] BTW, I'm blind, MeGUI can already import MPeg2 files in the d2v creator and automatically pass them to the avisynth module.
Doom9
24th November 2005, 09:17
BTW, I'm blind, MeGUI can already import MPeg2 files in the d2v creator and automatically pass them to the avisynth module.No you're not blind, that's the way it works. It would be nice if people actually tried first before asking for anything.. makes them look rather sillyif they don't.
It would be a mistake to remove avisynth from the input stream.Absolutely, especially since x264.exe only supports AviSynth and raw .yuv input.
I see a few issues with AVI input though: the first one is audio. There are only so many audio types BeSweet can handle with the vobinput plugin, and then you have those with multiple audio tracks (not sure BeSweet supports that at all and even if it did, it would mean a lot of overhead in somehow figuring out what tracks there are and the user has no help in selecting the right one), then there's the issue of missing filters (directshow versus vfw... avisource versus directshowsource, movies may play just fine but are uneditable because of a lack of VfW filters). Those are just a few issues that come along when you consider AVI. And the main problem may not even the technical side but the user side as people will throw the crap they download from P2P networks at MeGUI.. at least with DVDs you have some kind of regularity in the input.
Sharktooth
24th November 2005, 15:09
I'm still struggling to get MeGUI compiled for .NET 1.1. Could you take a look at this environment Sharktooth and see what I'm doing wrong?
Here are the environment variables in the command shell I use to compile:
...
Or just post the environment variables you use so i can compare them.
Thanks.
I use the SDK compiler (csc.exe). here's my sdkvars.bat:
Set Path=C:\Program Files\Microsoft.NET\SDK\v1.1\Bin\;C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\;C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\bin\;C:\Program Files\Microsoft Visual Studio .NET 2003\Common7\IDE\;%PATH%
Set LIB=C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\lib\;"C:\Program Files\Microsoft.NET\SDK\v1.1\Lib\";%LIB%
Set INCLUDE=C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\include\;"C:\Program Files\Microsoft.NET\SDK\v1.1\include\";%INCLUDE%
Set NetSamplePath=C:\PROGRA~1\MICROS~1.NET\SDK\v1.1\
Sharktooth
24th November 2005, 16:08
switch (xs.EncodingMode)
{
case 0: // ABR
sb.Append("--bitrate " + xs.BitrateQuantizer + " ");
break;
case 1: // CQ
sb.Append("--qp " + xs.BitrateQuantizer + " ");
break;
case 2: // 2 pass first pass
sb.Append("--pass 1 --bitrate " + xs.BitrateQuantizer + " --stats " + "\"" + xs.Logfile + "\" ");
break;
case 3: // 2 pass second pass
case 4: // automated twopass
sb.Append("--pass 2 --bitrate " + xs.BitrateQuantizer + " --stats " + "\"" + xs.Logfile + "\" ");
break;
case 5: // 3 pass first pass
sb.Append("--pass 1 --bitrate " + xs.BitrateQuantizer + " --stats " + "\"" + xs.Logfile + "\" ");
break;
case 6: // 3 pass 2nd pass
sb.Append("--pass 3 --bitrate " + xs.BitrateQuantizer + " --stats " + "\"" + xs.Logfile + "\" ");
break;
case 7: // 3 pass 3rd pass
sb.Append("--pass 3 --bitrate " + xs.BitrateQuantizer + " --stats " + "\"" + xs.Logfile + "\" ");
break;
case 9: // constant quality
sb.Append("--crf " + xs.BitrateQuantizer + " ");
break;
} // now add the rest of the x264 encoder options
Case 8 is missing (that's the 3 pass auto!). the code for 3 pass auto is missing from both full and x264_only.
Doom9
24th November 2005, 17:12
I guess I need to have a look personally.. you're still looking in the wrong place. case 8 and case 4 are virtual cases.. they never happen because in job generation, when a job has either of these states, it'll be changed to 2 / 5 respectively, and another (or two) jobs are created having values 3 and whatever your settings say it should in case of a three pass (note that in 3 pass it can be 1-3-2 or 1-3-3, where the former means the stats are not being overwritten by the third pass).
So, this switch never gets a 4 or an 8, but when I initially wrote it, I didn't quote know that yet but figured case 3 and 4 would be the same, hence 3 falls through to 4. If you got rid of case 4 and put the code from case 4 to case 3, the software would work just the same).
Also, the latest patch still has problems. activate b-rdo, set nb of b-frames back to 0, press OK, press config again and b-rdo is on again..
Doom9
24th November 2005, 17:24
hmm.. I don't see the problem. Created an automated 3 pass, here are the 3 commandlines:
<Commandline>"x264.exe" --pass 1 --bitrate 700 --stats "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.stats" --bframes 2 --no-b-adapt --subme 1 --b-rdo --analyse none --me dia --threads 2 --progress --no-psnr --output NUL "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.avs" </Commandline>
<Commandline>"x264.exe" --pass 3 --bitrate 700 --stats "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.stats" --bframes 2 --no-b-adapt --subme 6 --b-rdo --analyse p8x8,b8x8,i4x4 --threads 2 --progress --no-psnr --output "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.mp4" "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.avs" </Commandline>
<Commandline>"x264.exe" --pass 3 --bitrate 700 --stats "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.stats" --bframes 2 --no-b-adapt --subme 6 --b-rdo --analyse p8x8,b8x8,i4x4 --threads 2 --progress --no-psnr --output "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.mp4" "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.avs" </Commandline>
build: 0.2.3.1b-CK_LevelsPatch_0.3
bottom line: trust the commandline in the jobs, not the preview because you cannot preview an automated 3 pass intelligently without a serious rewrite.
Sirber
24th November 2005, 17:26
The last 2 uses "-- pass 3".
Should be:
--pass 1
--pass 3
--pass 2
:confused:
Doom9
24th November 2005, 17:29
aargh.. another one not getting it.. there's an option in the settings "overwrite stats file in 3rd pass".. if it's checked, it's 1-3-3, if not, 1-3-2.. but I already posted that in this very page..
Sharktooth
24th November 2005, 17:30
bug no.1 : When clicking "show commandline" checkbox in the config dialog the wrong commandline is displayed (1st pass) and if you select "turbo" it will display the turbo speedups.
Sharktooth
24th November 2005, 17:31
bug no.2: Im still looking HOW to reproduce the commandline b0rking...
ill restore the 3rd pass in my megui video profiles hoping someone will catch that bug again.
Doom9
24th November 2005, 17:43
if you absolutely must see the 3rd pass commandline in preview when selecting automated 3 pass (keep in mind this is a virtual mode.. there cannot be a Job object having encodingMode == 8 (automated 3 pass), or == 4 (automated 2 pass). And unless somebody is messing around in jobUtil, this has worked properly for ages. The whole tri-state thing never touched jobUtil, only the GUI class and CommandlineGenerator, and in the latter it's only generateVideoCommandline that has been touched.
alright and here's the change to be made to
if (xs.EncodingMode != 2 && xs.EncodingMode != 4 && xs.EncodingMode != 5 && xs.EncodingMode != 8) and replace it with
if (!(xs.EncodingMode == 2 || xs.EncodingMode == 5))
and then add the darned case 8 in the switch:
case 7: // 3 pass 3rd pass
case 8: // automated threepass, show third pass options
sb.Append("--pass 3 --bitrate " + xs.BitrateQuantizer + " --stats " + "\"" + xs.Logfile + "\" ");
break;
you should have the preview you so crave.. it changes absolutely nothing in job generation though.. this is purely cosmetical since encodingmode = 8 doesn't exist when it comes to jobs. But I have a feeling this is where people go wrong.. commandline preview isn't WYSIWYG.. it's WYSINQWYG.. where NQ = not quite.
to further speed up turbo, you can also add the following to
if (xs.Turbo)
in generateX264CLICommandline()
add
xs.MixedRefs = false;
xs.BRDO = false;
Sharktooth
24th November 2005, 18:57
latest bugfixes:
Added b-rdo to the turbo mode options exclusions.
Fixed the FULL compilation x264 turbo mode options (they were different from x264_only conditional compilation options).
the files are here:
http://files.x264.nl/Sharktooth/?dir=./megui
todo:
- make lossless disable AQ options.
- check the whole commandline preview system.
Doom9
24th November 2005, 19:05
any reason why you didn't include the changes I posted above?
Sharktooth
24th November 2005, 19:11
Yes, i'll check the whole command line preview in the next patch (i will include your changes in that one).
charleski
24th November 2005, 19:25
Just to let you know: I'm working on a variety of additions to the UI, some to incorporate things people have asked for in the forums, most to do stuff that I want :). I want to get them in place and test them before posting the code, though, so it'll probably be the weekend before I put it up.
Sharktooth
24th November 2005, 19:32
remember to merge all the changes i posted... :)
foxyshadis
24th November 2005, 19:44
With recent versions I'm getting an unhandled exception when clicking on the job config option in x264 version, after loading an avs file. I haven't had a chance to test full version yet. Setting the profile level to anything other than unrestricted works fine.
stack dump is:
************** Exception Text **************
System.ArgumentException: '0' is not a valid value for 'Value'. 'Value' should be between 'Minimum' and 'Maximum'.
at System.Windows.Forms.NumericUpDown.set_Value(Decimal value)
at MeGUI.x264ConfigurationDialog.set_CodecSettings(x264Settings value)
at MeGUI.x264ConfigurationDialog.EnforceLevel(x264Settings inputSettings)
at MeGUI.x264ConfigurationDialog.showCommandLine()
at MeGUI.x264ConfigurationDialog.avcLevel_SelectedIndexChanged(Object sender, EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
at MeGUI.x264ConfigurationDialog.set_CodecSettings(x264Settings value)
at MeGUI.MeGUI.videoConfigButton_Click(Object sender, EventArgs e)
max-holz
24th November 2005, 19:48
Hi Sharktooth, the link to x264 Full package 375A seems to be broken.
Sharktooth
24th November 2005, 19:49
It should have been fixed yet.
Download the new x264-Full package or get the bins 7 posts above...
Sharktooth
24th November 2005, 19:50
Hi Sharktooth, the link to x264 Full package 375A seems to be broken.
fixed
Doom9
24th November 2005, 20:06
With recent versions I'm getting an unhandled exception when clicking on the job config option in x264 version, after loading an avs file. I haven't had a chance to test full version yet. Setting the profile level to anything other than unrestricted works fine.I can't verify that.. it must be settings related so you need to share a lot more info. Plus, this is a topic for the user thread ;)
leowai
25th November 2005, 06:03
bottom line: trust the commandline in the jobs, not the preview because you cannot preview an automated 3 pass intelligently without a serious rewrite.
Yes, commandline in the jobs will be the final conversion parameters passed to the encoder client. If preview panel doesn't work as expected (to be same as the commandline in the jobs), what would it be useful anymore? Agree?
Furthermore, jobs only generated after MeGUI is closed. This is not so convenient for examining commandlines generated by MeGUI, especially when new switch is added. You need to close to exam and reopen to edit.
So I have some suggestion to the preview panel.
Choice 1: I also know that preview 3 passes will be a pain to the GUI where it might requires a large preview window at bottom of it. Why don't make it with slide bar? So that user can copy and paste it to a notepad to preview all the 3 passes if they are too long to preview at once in the preview panel.
Choice 2: In case of serious rewrite of the preview panel, I would suggest the 3 passes preview panel with following format.
For the case of Doom9's automated 3 pass with turbo: http://forum.doom9.org/showthread.php?p=742053#post742053.
====================================================
[Turbo mode - 1st Pass]
"x264.exe" --pass 1 --bitrate 700 --stats "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.stats" --bframes 2 --no-b-adapt --subme 1 --b-rdo --analyse none --me dia --threads 2 --progress --no-psnr --output NUL "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.avs"
[Diff & Add Switch in 2nd Pass & 3rd Pass]
(--pass 3,--pass 3) --subme 6 --analyse p8x8,b8x8,i4x4 --output "D:\DVDs\DVDVolume\VIDEO_TS\re-trailer.mp4"
====================================================
Will there any additional switches will be used in 2nd & 3rd pass than the turbo 1st pass? If, yes then we probably can use colour to differentiate the "different" and "additional" switch in the second section.
I think it's easier to compare between passes this way. However, this might introduce another issue on generating this preview. Will that be difficult? How should the commandline comparison works in current the future release? Probably the most important thing is who is willing to do this?
Question: Is "--me dia" a default option? Because "--me dia" presents in turbo mode only and not in 2nd and 3rd pass.
charleski
26th November 2005, 06:42
Ok, here's a bundle of UI changes, mostly aimed at making the avisynth script creator operate the way I want it to - I've still been using GordianKnot to generate avisynth scripts, and I suppose that lots of people out there are very familiar with GK, so it's a good base to work from. Also includes several other elements detailed in the changelog. I'll start looking at importing AVIs next, but wanted to finish this lot up first.
0.10 26 Nov 2005
For some reason adding the path to dgdecode.dll in the PATH env var wasn't working for the imports done in d2vReader.cs. After wasting far too much time trying various things I just did it a specific LoadLibrary() call. Intialisation of the d2vReader now reads in the settings.xml file and finds the path to DGIndex from there.
Also added a call to this.saveSettings() when the Settings form closes.
0.9 26 Nov 2005
Added in the commandline generation patches to fix preview of automated 3-pass posted by doom9 (24Nov) and Sharktooth (25Nov).
0.8 25 Nov 2005
The 'SAR' calculated by the avisynth creator is now transferred directly to the configuration for x264, xvid and lavc encoders.
Audio language tag now defaults to English in the muxer.
Added a choice for minimal noise filtering to the avisynth creator: Undot().
Added a checkbox to the avisynth creator window to allow the choice of using dgdecode's integral deblocker.
Avisynth creator: Checking the 'Retain anamorphic resolution' box now causes 'Suggest resolution' to be
set to true automatically. 'On save close and load' is now checked by default as it was bugging me :).
Fixed a couple of bugs in avisynth script generation so that the new options get written correctly.
0.7 24 Nov 2005
The path to DGIndex is now added to the PATH environment variable so that it's not necessary to put dgdecode.dll in MeGUI's application dir.
Additions to the main settings dialog:
You can now specify the directory in which your avisynth plugins are stored. When loading a dll in the avisynthCreator Edit tab you'll automatically be sent to that directory.
There are 2 new text fields in the settings dialog for video and audio extensions. These will be automatically added to the output name created when loading a video or audio file for encoding. This is optional and defaults to null.
0.6 24 Nov 2005
Added the ability to load MPEG2 files directly in the AVisynth script creator. The vobinput dialog will be called with appropriate settings installed. After the queued dgindexer job is run the avisynth window will re-open with the d2v file loaded.
0.5 24 Nov 2005
Altered the avi script creator to allow encoding of anamorphic input streams without losing vertical resolution.
A new checkbox is present in the svisynth window: "Retain anamorphic resolution and set SAR in encoder". If this is checked the resolution controls operate as in GordianKnot when GK is set to an input PAR of 1:1. On saving the script a dialog will warn that SAR needs to be set in the encoder and gives the appropriate values. These values are also written in a comment at the end of the .avs that is saved.
Added Telecide(order=1) option for PAL deinterlacing.
0.4 23 Nov 2005
Altered the way in which MeGUI handles changes to the video configuration in the x264 dialog. The aim is to allow n00bies like me to tinker with proper profiles such as the ones released by Sharktooth without overwriting
them and forgetting what settings they've changed.
There is a new option in the MeGUI Settings dialog: Safe Profile Alteration.
If this is checked, upon exiting the dialog by clicking OK after having changed any of the encoder settings APART from bitrate, SAR and zones, the program will create a new profile called "<old profile name>Tweaked"
which contains the new settings. The user may subsequently revert back to the old profile at any time as it remains intact.
I excluded bitrate, SAR and zones from the protection as I thought those were elements that users might want to alter according to the particular video being encoded.
0.3 21 Nov 2005
Added a check for frame dimensions.
Moved a few utility calculations from JobUtils.cs to AVCLevels.cs and altered the parameters to validateAVCLevel() in order to support the above.
Altered the return values from the look-up functions in AVCLevels.cs so that Unrestrained is treated the same as level 5.1 for many checks - should alter this later.
Fixed a mistake in EnforceLevels()that could cause the number of reference frames to be set to 0.
Implemented a static flag in x264ConfigurationDialog.cs to reduce some of the event-handler recursion. Not sure
if this is necessary or even really desirable.
files changed:
Form1.cs
JobUtil.cs
x264ConfigurationDialog.cs
AVCLevels.cs
0.2 20 Nov 2005
Small fix to the enabling code for P4x4mv so it won't conflict with Macroblock Options.
Levels Patch 0.1 20 Nov 2005
All the relevant levels logic now sits in AVCLevels.cs and each decision is centralised to aid management.
Switching to a new profile is barred if the new profile violates the level that's selected.
The selected level is enforced at each call to showCommandLine().
The enforcement code will attempt to make the current codec settings conform to the level specified.
If it is unable to do so it will force the level to Unrestrained and the calling Form (x264ConfigurationDialog)
will pop up a warning dialog.
I tried compiling a 1.1 binary, but still have something screwed up, so those with .NET 1.1 will have to wait for ST to do it.
Full source is here (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-CK0.10.rar)
Modified files only are here (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-CK0.10ChngdFls.rar).
Kostarum Rex Persia
26th November 2005, 10:32
Wow,great news,charleski.About MPEG2 input,can you also include that?
Doom9
26th November 2005, 12:02
Question: Is "--me dia" a default option? Is the fastest me type.. hence it's in turbo. the default is --me hex.. hence you never ever see that in a commandline (in other words, when there's no --me flag, then it's the same as manually typing --me, and since I don't want to clutter up the commandline, no x264.exe defaults are written to the commandline).
Furthermore, jobs only generated after MeGUI is closed. This is not so convenient for examining commandlines generated by MeGUI, especially when new switch is added. You need to close to exam and reopen to edit.That's not true. Since automated X pass is a virtual mode that no x264 encoder is aware of, it means you can get a commandline preview by selecting the proper existing mode. So for instance if you want to know what you get in an automated 2 pass, configure it as you want, then change the encoding mode to 2 pass first pass, and then to 2 pass second pass. Those two commandlines are exactly what you get when in automated 2 pass.. there cannot be any difference, no matter what you think.. if you don't believe that, please verify it, the source code is available. The same applies to automated 3pass, but there you need to take the settings into account. There are 2 3pass settings: 1 is "Overwrite stats file in third pass", the other one is "Keep 2nd pass output in 3rd pass", but of which I think are rather self-explanatory, but please ask if there's something that you think is still unclear.
If the first option is set (it's by default) and the second isn't (it's by default), you can see your commandline by configuring automated 3pass, then select 3pass 1st pass, 3pass 2nd pass and 3pass 3rd pass after another respectively and it exactly matches what is in the job. Once again, this always holds because it's written that way.
Hence, I really see no reason to complicate matters and return multiple commandlines for virtual modes. It's not like it's possible that what I described above doesn't work in some case, it always works because automated encoding only means that once the jobs are created, the settings that you see in the commandline preview for automated encoding matches the last pass (once Sharktooth includes the fixes above), and the first pass is derived from that by setting the encoding mode to 1st pass, then creating the job.. so you see, no matter what, even with solar flares, aliens and other unexplainable things, the commandline you get will always be equal to if you encode your automated X pass, then change to mode to the pass whose commandline you're interested in.. job generation does just that.
Of course, you may not see input/output and stats file name unless you already configured them, but nobody can guess what those values will be until you configure them and no amount of code can ever change that..
About MPEG2 input,can you also include that?May I suggest for the last time that you read up again, next time there'll be strikes right away.
charleski
26th November 2005, 13:47
Fixed a minor bug in one of the input filters
Modified files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-CK0.11ChngdFls.rar)
[Edit]Note that because of the way in which handling of dgdecode has changed, you now have to make sure that dgdecode.dll does not reside in the same directory as MeGUI.
Sharktooth
26th November 2005, 14:09
x264 conditional compiling:
SettingsForm.cs(79,58): warning CS0169: The private field
'MeGUI.SettingsForm.openFolderDialog' is never used
SettingsForm.cs(91,26): warning CS0649: Field
'MeGUI.SettingsForm.safeProfileAlteration' is never assigned to, and
will always have its default value null
SettingsForm.cs(92,26): warning CS0169: The private field
'MeGUI.SettingsForm.outputExtensions' is never used
SettingsForm.cs(93,25): warning CS0169: The private field
'MeGUI.SettingsForm.videoExtension' is never used
SettingsForm.cs(94,23): warning CS0169: The private field
'MeGUI.SettingsForm.audioExtLabel' is never used
SettingsForm.cs(95,23): warning CS0169: The private field
'MeGUI.SettingsForm.videoExtLabel' is never used
SettingsForm.cs(96,25): warning CS0169: The private field
'MeGUI.SettingsForm.audioExtension' is never used
SettingsForm.cs(97,23): warning CS0169: The private field
'MeGUI.SettingsForm.avisynthPluginsLabel' is never used
SettingsForm.cs(98,24): warning CS0169: The private field
'MeGUI.SettingsForm.selectAvisynthPluginsDir' is never used
SettingsForm.cs(99,25): warning CS0169: The private field
'MeGUI.SettingsForm.avisynthPluginsDir' is never used
full compiling:
d2vReader.cs(100,21): warning CS0168: The variable 'e' is declared but never used
When clicking Tools->Settings an unhandled exception occurs:
See the end of this message for details on invoking
just-in-time (JIT) debugging instead of this dialog box.
************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at MeGUI.SettingsForm.set_Settings(MeGUISettings value)
at MeGUI.MeGUI.mnuToolsSettings_Click(Object sender, EventArgs e)
at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
at System.Windows.Forms.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
megui-x264
Assembly Version: 1.0.2156.25410
Win32 Version: 1.0.2156.25410
CodeBase: file:///C:/Program%20Files/x264/megui-x264.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
18st2fzg
Assembly Version: 0.0.0.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
suuztiet
Assembly Version: 0.0.0.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
************** JIT Debugging **************
To enable just in time (JIT) debugging, the config file for this
application or machine (machine.config) must have the
jitDebugging value set in the system.windows.forms section.
The application must also be compiled with debugging
enabled.
For example:
<configuration>
<system.windows.forms jitDebugging="true" />
</configuration>
When JIT debugging is enabled, any unhandled exception
will be sent to the JIT debugger registered on the machine
rather than being handled by this dialog.
Bins and merged 0.10-0.11 sources are here: http://files.x264.nl/Sharktooth/?dir=./megui
charleski
26th November 2005, 14:15
Yes, I'll go through and tidy up those warnings later, they shouldn't stop compilation.
Compiling doom9's original code in VSExpress 2005 gives you 26 warnings, hehe, mostly related to conditional compilation and exception handling.
Doom9
26th November 2005, 14:16
I guess we should establish a rule that patches need to compile without any warnings in all 4 modes in .NET 1.1.
@charleski: It is a .NET 1.1 project.. I've compiled my latest (unreleased build, the 0.2.3.1c) using .NET 2.0 and found that all the warnings were related to things that had been changed between 1.1 and 2.0.. and adapting to 2.0 would mean it would no longer work in 1.1, thus the deprecated warnings in 2.0 are okay.
Sharktooth
26th November 2005, 14:19
i edited my post above... an unhandled exception occurs when clicking Tools->Configuration (tested in x264 mode).
Also the "Tweaked profiles handling" is not present in x264 conditional compiling... maybe some other conditional compiling related problems too.
I can't fix those things coz i'm a bit busy for the next few days.
charleski
26th November 2005, 17:08
Ok, I patched the files so that warnings no longer appear when compiling any of the five different versions. Altered the forms code so that safe profile alteration should now work in all versions.
Version 0.12
Modified Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-CK0.12ChngdFls.rar)
.NET 1.1 binaries (http://homepages.nildram.co.uk/~cajking/MeGUIbins-2.3.1b-CK0.12.rar) - No guarantees for these. I tried creating a virtual machine using a spare XP Home licence and these fail to run on that, but i suspect that there's a setup problem in the VM's environment.
I suppose I should get this rant out of the way: I've noticed several posts from people asking for features or having problems which exist only because they are using a 'Lite' version of MeGUI. Supporting multiple differing versions of the interface merely increases the support load while yielding little benefit IMO. GUI programming is tedious anyway, but generating multiple versions of the interface just increases that tedium. For instance: SettingsForm.cs conatins three completely separate code streams for different versions of the program, meaning that any alteration or addition to the layout needs to be handled 3 times.
As MeGUI grows, the overhead involved in supporting different versions will expand as well, and TBH I can't really see the point, especially when the majority of people should be using the full version anyway. There is a justification for supporting an x264-SVN version, but the code for that should not involve any of the GUI elements.
[Edit]
Version CK0.13
Avisynth script creator now automatically inserts a call to dgdecode.dll.
Tidied up the input-enable states of some fields in the x264 config to reflect the level in circumstances where the contents aren't changed.
Modified Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-CK0.13ChngdFls.rar)
.NET 1.1 binaries (http://homepages.nildram.co.uk/~cajking/MeGUIbins-2.3.1b-CK0.13.rar) - same caveat as above.
[And again]
Version CK0.14
Trying to get everything I want in place while I have some time.
Added some more automation to the avs creator and upgraded it to use the latest versions of the relevant dlls.
Modified Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-CK0.14ChngdFls.rar)
.NET 1.1 binaries (http://homepages.nildram.co.uk/~cajking/MeGUIbins-2.3.1b-CK0.14.rar)
Sharktooth
26th November 2005, 22:02
merged patches and binaries are always here: http://files.x264.nl/Sharktooth/?dir=./megui
however i would remove the snow conditional compiling and add a checkbox on the settings dialog to select enable/disable non-SVN options (so full svn and x264 svn conditional compiling can be removed).
This is only a suggestion and would like to know your opinions about it.
charleski
26th November 2005, 22:21
add a checkbox on the settings dialog to select enable/disable non-SVN options (so full svn and x264 svn conditional compiling can be removed).
That would be easy enough to add.
Doom9
26th November 2005, 22:34
I'm still wondering if we can't turn the whole conditional compilation into just a few lines and ineritance between the GUI classes.. like having a SettingsForm that handles just x264, and a CompleteSettingsForm that derives from it and adds the additional elements.
Sharktooth
27th November 2005, 14:55
I got confirmation that trellis can be disabled in fast 1st pass
charleski
27th November 2005, 22:59
The problem with changing the graphic interface with different versions is that you need to layout the elements (text boxes, buttons, etc), and you need to take into consideration that the full version has a settings form thats about three times the size of the others.
One possibility would be to retain the layout of the full version and just disable those elements that weren't used in any specialised version. That would certainly require the least modification to the code.
acidsex
28th November 2005, 04:07
Maybe I am missing the option but can MeGUI muxer (mp4) be used to import avi files to be muxed to mp4? The drop down box only gives me the option to import mp4 files to be muxed. If not, any chance this can be added with relative ease?
leowai
28th November 2005, 05:44
@Doom9,
First of all, thanks for your clear explanation.
So for instance if you want to know what you get in an automated 2 pass, configure it as you want, then change the encoding mode to 2 pass first pass, and then to 2 pass second pass. Those two commandlines are exactly what you get when in automated 2 pass.. there cannot be any difference, no matter what you think.
Haa... I learn something new in using MeGUI. I really didn't aware of this before :( . My appologize for my mistake here. (May be I need to re-study on the "MeGUI manual"? :), just kidding.)
I'm not sure I'm the only one making this mistake because I thought there are no relationship between the "Automated 2 pass", "2pass - 1st pass" and "2pass - 2nd pass". Since each of these options appear in parallel in the drop down menu, I take for gruanted there are not linked.
If the dop down menu appears as follow, then I think won't miss this feature. I'm not here to request a change, but just to show my habit of reading related configurations.
Automated 2pass
: 2pass - 1st pass
: 2pass - 2nd pass
Automated 3pass
: 3pass - 1st pass
: 3pass - 2nd pass
: 3pass - 3st pass
Now I know the setting in "Automated 2 pass" will be preseved when changing from "Automated 2pass" to either of the 2pass with more specific details. Thanks. :D
Hence, I really see no reason to complicate matters and return multiple commandlines for virtual modes. It's not like it's possible that what I described above doesn't work in some case, it always works...
Yes, with your explanation above, I agree with you now. My previous suggestion seems to be quite redundance. :stupid:
Lastly, many thanks for the tips and the hard works on the MeGUI (including all other developers of MeGUI).
Doom9
28th November 2005, 09:12
Maybe I am missing the option but can MeGUI muxer (mp4) be used to import avi files to be muxed to mp4?No, that's not possible. The reason is that while mp4box can do that, it only works for MPEG-4 ASP, and since most people use MeGUI for MPEG-4 AVC, there would be hell to pay because it mostly doesn't work. So I think it's better not to offer this at all, than to offer an option 90% of the users cannot use because they have the wrong input.
Automated 2pass
: 2pass - 1st pass
: 2pass - 2nd pass
Automated 3pass
: 3pass - 1st pass
: 3pass - 2nd pass
: 3pass - 3st passDropdowns cannot have a hierarchy unless you write your own dropdown and I don't exactly feel like it. Plus, I don't really think that'll make clear how MeGUI works unless you know how it works already.
I've added a bunch of todo things to the first post if anybody's interested.
redfordxx
28th November 2005, 11:51
Hi, first, thanks to all devs for this nice tool... I am quite new, but if someone is interested I have some ideas (hope, nobody mentioned before). So, one of it:
IMO there could be some choice like "nth pass based on stats file".
Then all the parameters can be read and set from the stats file (which will be in pointed by the user).
Then, three types of parameters are possible
type 1 = do not change the nth pass behavior (I believe b-frames are purely based on stats file and not 2nd pass settings)
type 2 = should be same but can be changed (I don't know, maybe the IP and PB ratio?)
type 3 = can change (eg. bitrate)
then, type 1 will be always disabled, type 3 always enabled
there could be some "override parameters" checkbox, which could enable/disable parameters type 2
on top of that, if params type 2 overriden and differ from these in stats file, they could be redhighlighted...
There are IMHO many combobox choices concerning passes (1st,2nd,3rd). And the only think they differ is whether there is input stats, output stats and output video. So more interresting that having 7 or how many choices of passes can be to have different in and out stats file.
redfordxx
28th November 2005, 12:16
So put to the extreme, there could be one, but more flexible choice for all passes, like this picture.
Of course, probably some logic from past should be kept (not for example for me but for most users probably) and leave at least 1st pass and nth pass combobox choices separated...
There, again, are some obvious enable/disable/locked relations among the controls.
http://img207.imageshack.us/img207/8793/main1ng.jpg
[EDIT]Added picture instead of attachment to save the work for mod;)
charleski
28th November 2005, 13:10
IMO there could be some choice like "nth pass based on stats file".
You can do that already.
Select '3 pass - 2nd pass' and then go to the Advanced tab and points the stats field to your stats file.
IF I deciphered your post correctly, what you're asking is for a means to store the profile used to generate a stats file in a previous pass. This is a pretty advanced usage, since the vast majority of users will just be running a set of passes one after the other. If you think you might want to do an extra pass later and want to store the profile, you can always just copy the profile used from MeGUI's profiles directory to the dir with your video files, then copy it back if you want to reuse it (or just save it as a new profile with a unique name).
The modifications you ask for would just introduce more confusion for most users.
Doom9
28th November 2005, 13:53
there is a second way: instead of saving the profile, you could just keep the job around, load it again and just modify whichever settings you see fit.
And just so that we have no confusion: a stats file is what x264 generates. This does not include settings and it would be impossible to derive all encoding settings from a stats file. A profile is a file that keeps the settings for a given codec.
Come to think of it, wasn't it you (redfoxx) who posted something about MeGUI in the x264 development thread? It was about changing parameters without redoing the first pass, wasn't it?
Doom9
28th November 2005, 14:01
to all my fellow developers: I'm wondering if there's a reason to write the output of a 2nd pass in 3 pass mode (provided the settings don't ask for it.. there's a switch in the settings that ensures the third pass doesn't overwrite the second). Or perhaps an option to not write the 2nd pass output to speed things up a bit?
redfordxx
28th November 2005, 14:11
You can do that already.
Select '3 pass - 2nd pass' and then go to the Advanced tab and points the stats field to your stats file.But w/o loading the settings, right?
IF I deciphered your post correctly :D
I was not aware of the attachment pending feature, after you'll see it, it may be clearer.
what you're asking is for a means to store the profile used to generate a stats file in a previous pass. This is a pretty advanced usage, since the vast majority of users will just be running a set of passes one after the other. If you think you might want to do an extra pass later and want to store the profile, you can always just copy the profile used from MeGUI's profiles directory to the dir with your video files, then copy it back if you want to reuse it (or just save it as a new profile with a unique name).But you can't change it unless you edit it in the text file. The principle I proposed offers much more possibilities
When the newest x264 writes the settings to the stats file, it could be used.
The modifications you ask for would just introduce more confusion for most users.For me as a newbie is seeing so many multiple passes options confusing too.
And seeing now (if already correctly), that
3passes-3rd pass is same as 2passes 2nd pass
3passes-1st pass is same as 2passes 1st pass
3passes-2nd pass is same as 3passes 3rd pass+stats file
But the main effect I am aiming to is:
- once I am for whatever reason not satisfied with 2nd pass, I can redo it with changed settings.
- with this enable/disable scheme MeGUI will tell me, which settings can be safely changed in 2nd pass and for which I need new 1st pass.
- I for instance quite lately realized that 2nd pass does not do stats file. With the interface I proposed it is very clear, what is behind
- Storing (=not overwriting) all the stats files
redfordxx
28th November 2005, 14:30
there is a second way: instead of saving the profile, you could just keep the job around, load it again and just modify whichever settings you see fit.
And just so that we have no confusion: a stats file is what x264 generates. This does not include settings and it would be impossible to derive all encoding settings from a stats file. A profile is a file that keeps the settings for a given codec.
Come to think of it, wasn't it you (redfoxx) who posted something about MeGUI in the x264 development thread? It was about changing parameters without redoing the first pass, wasn't it?
It was redfordxx. ;)
That time not quite clear about and thinking of loading settings from job file. And then appeared x264 rev 374...
redfordxx
28th November 2005, 14:51
On the last page I have post with attachment. There is written "attachment pending approval" but I can display it. So, what does it mean?
gamr
29th November 2005, 04:29
bug report: if longer than 24hrs for a pass (athlon 1000) it seems to go nuts on the elapsed AND eta
Doom9
29th November 2005, 09:22
So, what does it mean?It means a moderator first has to approve it.
And then appeared x264 rev 374...Hmm.. why don't I see parsing statsfile and translate it into a class MeGUI understands? Could it be because reverse parsing is a PITA and has to be adapted each time there's a new option? And then you want the entire logic inside the codec duplicated into a GUI as well? I don't see the usefulness/time invested argument here at all. If you keep your stats file, wouldn't it be reasonable to keep the job as well so as to be able to redo things when necessary. I'm a big believer in the "keep your sources until such time when you're 200% sure you'll no longer need them". MeGUI already offers a big advantage over VDub and the like as you can resurrect and modify jobs. Just as in this case you won't check "delete temporary files", you shouldn't check "delete job after successful completion" either.
@gamr: I know.. my standard answer is "get a faster CPU".. an encoding session that takes more than 24h is the strongest indicator that your hardware is outdated beyond reason ;)
redfordxx
29th November 2005, 11:17
It means a moderator first has to approve it.OK, I replaced the attachment with picture on previous pagehas to be adapted each time there's a new optionSame as the settings interface, hand in handAnd then you want the entire logic inside the codec duplicated into a GUI as wellIf there is a way, how to benefit from the logic in the GUI before starting encoding... I don't know itIf you keep your stats fileI believe it is rewritten with the next pass, but OK, in most cases you use the next pass stats fileyou can resurrect and modify jobsThe only way I found was textediting the job file...
Doom9
29th November 2005, 11:42
Same as the settings interface, hand in handSo you want to double the amount of work for each commandline change.. and of course it's nice of somebody else does it, isn't it? And it is likely more than double the amount of work because you need additional code to handle unknown options, plus the next thing you'll ask for is load a commandline into the GUI.. and there we have multiple ways for the same option so more work again.
Also think about this: why would you need a GUI to finish off somebody else's work? I mean, as previously pointed out (and read the rest of my message as well), you can reload and modify jobs just fine. So the only real reason why anybody would want to load settings from a stats file into a GUI is to continue the work started in another software, in the VfW codec, on the commandline, etc. So, why would somebody make the first pass on the commandline and the second pass in a GUI?
The only way I found was textediting the job file...The setting "Delete completed Jobs" gets rid of jobs once they have been successfully completed. It is turned off by default, so all your jobs remain. So you can always select a job in the queue, press load, and voila, all its settings have been loaded. Then you can reconfigure what you want, and once you're done, go back to the queue and press the update button.. and the job will now have your modified settings. Or you could press queue to create a new job based on what you reconfigured.. the choice is yours. Double clicking on a job changes its status, so you can postpone it, or reactivate an already done job so that it can be encoded again, just like in VirtualDub.
There's a bunch of settings that influence if stats files are being overwritten or not. You could configure the settings so that your second pass output file is being kept, along with the second pass stats file. Those are not the default settings, but it's possible, you just have to activate the proper settings. There might even be an option to not write the second pass output at all in the future.
redfordxx
29th November 2005, 12:31
So you want to double the amount of work for each commandline change.. and of course it's nice of somebody else does it, isn't it?True, my programming knowledge is not good enough to contribute.
But please note, I do not want anybody to double his work or do anything else. I hope it was understandable from my post and from the post in x264 dev thread too. I am only sharing my ideas and trying to show my reasons which, I admit, come partially from lack of knowledge of 264 and MeGUI and all this stuff. Developer should decide whether to do it. The main and still present reason behind is the lack of knowledge about which settings should be consistent through passes (as you correctly recalled).
Anyway, thank you for all the further explanations. Seems to me I gave up exploring the possibilities of MeGUI too soon and left for CLI.
charleski
29th November 2005, 12:36
Well, I think a good idea is to get back to the root and look at what you actually want to do.
But the main effect I am aiming to is:
- once I am for whatever reason not satisfied with 2nd pass, I can redo it with changed settings.
- with this enable/disable scheme MeGUI will tell me, which settings can be safely changed in 2nd pass and for which I need new 1st pass.
It really looks quite simple to me. You encode a video, decide that it doesn't look good enough with the settings you've specified, and want to go back and re-encode it. Now, you want to know which settings you can alter without having to do the 1st pass again. I believe that those are discussed earlier in this thread, and it would be best to hunt back and find the posts. From what I can see, they're the subme value, macroblock analysis, ME algorithm, b-rdo and trellis, but check that. Those are easy enough to remember, or write down somewhere if you need to refer to them.
As I said before, one of the important aspects of designing a GUI is to keep it as simple as possible for the majority of users, who will have a standard profile and just do an automated 2pass encode. Adding in extra interface complexity to handle special cases would add needless confusion to the process for most people.
Sharktooth
29th November 2005, 13:50
disabled trellis in fast first pass (still have not much time to code, but this was pretty easy).
files (sources and bins) are at the usual place: http://files.x264.nl/Sharktooth/?dir=./megui
gamr
29th November 2005, 14:02
@gamr: I know.. my standard answer is "get a faster CPU".. an encoding session that takes more than 24h is the strongest indicator that your hardware is outdated beyond reason ;)
oh i realize this, its just the only windows box on the network these days, ill take the hint and swap a cpu with something
Doom9
29th November 2005, 15:11
@Sharktooth: are my auto2/3 pass changes included now?
Randall
29th November 2005, 15:14
fix the errors that ocurr if auto-popup of the status window is not enabled (events must not propagate to the progresswindow in that case)
This bug is of particular annoyance to me, on an otherwise excellent piece of software, that has fully replaced my Gordian Knot. Keep up the excellent work!!
Sharktooth
29th November 2005, 15:44
@Sharktooth: are my auto2/3 pass changes included now?
EDIT: sorry Doom9, charleski already did it in one of his patches. So, yes, it's there.
charleski
30th November 2005, 00:28
Quote:
Originally Posted by Doom9
fix the errors that ocurr if auto-popup of the status window is not enabled (events must not propagate to the progresswindow in that case)
This bug is of particular annoyance to me, on an otherwise excellent piece of software, that has fully replaced my Gordian Knot. Keep up the excellent work!!
Could you describe exactly what happens when this occurs? I always run MeGUI with the status window set to auto (ie Open Progress Window is checked), so have never seen this. I'm pretty sure it just needs a minor change to the flow control, but I want to be sure that would catch whatever error you see.
BTW, I've been thinking about including avi import, and it looks like it would be best to invoke DirectShow's IGraphBuilder. The most straightforward method that I've found of doing that in C# involves rewriting the IDL inteface and looks like it indirectly relies on a small amount of registry access for the GUID. (Typically, MS's own documentation was of no help on this at all, I finally tracked down the method on an independent website :angry: .)
This is from codeproject.com and looks like this:
// ======== C# version of ICaptureGraphBuilder2 (DsExtend.cs) ======
[ComVisible(true), ComImport,
Guid("93E5A4E0-2D50-11d2-ABFA-00A0C9C6E38D"),
InterfaceType( ComInterfaceType.InterfaceIsIUnknown )]
public interface ICaptureGraphBuilder2
{
[PreserveSig]
int SetFiltergraph( [In] IGraphBuilder pfg );
[PreserveSig]
int GetFiltergraph( [Out] out IGraphBuilder ppfg );
....
I want to use this so I can run graphedit from within the program and then know for sure whether the user has the correct filters installed to render the file. Just letting you know in case anyone has an aversion to including a dependency on DirectX (or knows of a better way to do it).
Chainmax
30th November 2005, 00:41
EDIT: sorry Doom9, charleski already did it in one of his patches. So, yes, it's there.
So, megui_0.2.3.1b_ck14_20051129 is the latest version? What do Doom9's auto2/3 pass changes consist of?
charleski
30th November 2005, 00:47
Just changes to the commandline preview in the configuration window. the actual commands sent to x264 remain the same.
Doom9
30th November 2005, 01:07
ould you describe exactly what happens when this occurs?Just run it once, you'll see. the logs is full with tons of exceptions.. while the progresswindow is always created, you can only send events to if it has been shown at least once... otherwise you get an exception. I described what needs to be done in the first post.. if you want to look at it, please have a look at the whole thing, not just the quick fix that gets rid of the exceptions.
charleski
30th November 2005, 01:44
Well, what I was thinking of was eating the events in another way if there's no window to send them to, filtering some into logfile messages if they're relevant. What sort of thing were you envisioning?
[Edit] Actually, now I did some tests and looked at the log: Are you talking about all those Invoke errors on a window with no handle? That's very easy to fix...)
On another point, maybe it's just my opinion, but the TODO
automatic deinterlacing of interlaced materialSounds a bit magical, heh. Almost all the material I deal with is PAL, but even in the PAL realm there's no such thing as automatic deinterlacing if you want optimal frame recovery. Those who want to deinterlace without worrying about the details are probably better-off just passing the material through LeakKernelDeInt, though that may produce a small amount of unecessary distortion. Since much of my material is PAL MPEG transport streams, I see a lot of odd things happen, like mode shifts from progressive to interlaced when they run the titles, often with mixed field shifts. And of course that doesn't even begin to compare to the nightmare that is NTSCi->PALi->PALp conversion. There are some good avisynth tools that can deal with these things, but they require user intervention, and I wouldn't want to delude people that we could automagically deinterlace anything they throw at MeGUI. In fact, one of my aims at some point is to write some GUI code to make tweaking the Telecide parameters easier, probably including some help in creating an override file for the filter as well.
Randall
30th November 2005, 06:05
Ok so where can I report a bug for MeGUI? The d2v project files that it writes are not compatible with avisynth. They crash instantly. the only way I can get a valid d2v file is to manually open up DGIndex and do the F4 dance. I would diff out the working and corrupted d2v files and post them here, but I am too tired to do it now.
Doom9
30th November 2005, 09:18
Are you talking about all those Invoke errors on a window with no handle? Yup. I actually halfway fixed them already by keeping track of the window.. I set a bool to true when I call show, and when the window is closed from within Form1 back to false. But that's only half of the story.. since you can close the window manually, but that only hides it, that state change should propagate back to the GUI.. it's not so much about the events there as it is to enable/disable the show progress window menu point.
Sounds a bit magical,Not really, AutoGK does a pretty good job at this.. better than any other software I know. Granted, nothing is perfect but if you can reach a success rate in the 90 percentile, you've done a pretty darned good job.
Ok so where can I report a bug for MeGUI? There's the thread where new builds are being posted and the like.. this thread is for people who speak C# as the first post says.
charleski
30th November 2005, 11:55
The d2v project files that it writes are not compatible with avisynth. They crash instantly.
If you're using one of the latest betas then you need to make sure that dgdecode.dll is not in the same directory as MeGUI.
Doom9
30th November 2005, 12:57
If you're using one of the latest betas then you need to make sure that dgdecode.dll is not in the same directory as MeGUI.I've always wondered why that is..
dimzon
30th November 2005, 13:16
Doom9
What does You think about such (http://forum.doom9.org/showthread.php?t=103069) audio encoding methodology?
Take look @ BeHappy alpha (http://www.mytempdir.com/289180)
http://img505.imageshack.us/img505/2240/untitled0hz.gif
Maybe we can integrate BeHappy into MeGUI?
Randall
30th November 2005, 13:34
If you're using one of the latest betas then you need to make sure that dgdecode.dll is not in the same directory as MeGUI.
Thank you for that notice. Maybe it was mentioned somewhere in the README or something, but I definately missed this little tidbit of info.
Doom9
30th November 2005, 14:00
What does You think about such audio encoding methodology? Hmm.. audio in AviSynth, the old topic. I was about to write how the heck is that going to work before I read the thread you linked to. Question is: what do we lose over using BeSweet? Basically I need all the options I'm currently using in MeGUI available (downmix, normalization, various codecs without hassle and using 10 different executables, delay). If that can be fullfilled, it could definitely be an option (finally resolving the cutting angle once and for all).
charleski
30th November 2005, 14:24
I've always wondered why that is..
http://forum.doom9.org/showthread.php?p=742763#post742763
I'll go back and remove the original dll imports that are causing the problem in the next patch. One of the bugaboos with DGMPGDec has always been the proliferation of different versions of dgdecode: DGIndexer gets updated and people upgrade it, then forget to copy the dll to all the program directories that rely on having their own copy. The solution is simply to load the dll straight from the directory in which DGindexer resides. Since we know that directory, this is simple.
BTW, I looked at AutoGK, it seems that it runs a script based on FrameEvaluate over a selection of frames and uses that to decide whether to Telecide or KernelDeInt. Has len0x ever mentioned what algorithm he uses?
Sharktooth
30th November 2005, 14:43
working on this: http://www.skybound.ca/developer/visualstyles/default.aspx
it's free...
Doom9
30th November 2005, 14:53
Has len0x ever mentioned what algorithm he uses?No: http://forum.doom9.org/showthread.php?t=100479 And the post you linked to only mentions that it has to be that way (I picked that up before), and not why. The solution with a given path has one disadvantage though: you are forced to configure the dgindex path, even if you're not going to use dgindex from within megui.
@Sharktooth: what about styles in .NET 2.0? The first megui version ever was built on 2.0 and it looked rather good and it seems to have styles enabled by default.
Sharktooth
30th November 2005, 14:58
@Doom9: it will require .NET 2.0 Framework. It's still not available for all windows regionalized versions.
dimzon
30th November 2005, 15:23
Question is: what do we lose over using BeSweet?
AviSynth is OpenSource, BeSweet is not (it's free but not OS)
AviSynth has well documented plugin API, BeSweet has not
AviSynth has multiple external plugins/sources (including NicDtsSource), BeSweet has not
External encoder with pipeline support is great solution - it's easy to add new encoder
Sharktooth
30th November 2005, 15:32
you forgot besweet has bugs... :)
one that bugs some users is a crash (or something) when using AAC as input.
Doom9
30th November 2005, 15:48
AviSynth is OpenSource, BeSweet is not (it's free but not OS)
AviSynth has well documented plugin API, BeSweet has not
AviSynth has multiple external plugins/sources (including NicDtsSource), BeSweet has not
External encoder with pipeline support is great solution - it's easy to add new encoderI asked the other way round, didn't I? Throwing away something perfectly good for something lesser just because it better fits your ideology may fit linux-lover-m$-hater but it's no way to write software that's going to be used by non programmers.
BeSweet cannot handle AAC input..
Don't get me wrong, AviSynth support is exciting, but dropping your eggs and running away flapping your arms never was a solution. Any major change has to be thought through first, followed by tests in critical areas, followed by proper design and last but not least the implementation.
dimzon
30th November 2005, 16:27
I asked the other way round, didn't I? Throwing away something perfectly good for something lesser just because it better fits your ideology may fit linux-lover-m$-hater but it's no way to write software that's going to be used by non programmers.
I believe any AviSynth user is programmer (a little). And don't forget:
AviSynth has well documented plugin API - it's easy to extend supported input formats. And it's allredy possible to use NicDtsSource for DTS Transcoding. And it's easy to create user frendly GUI for non programmers :) (Current BeHappy GUI is for my own use, flexible and extensible but not to be used by non programmers. But it's possible to write GUI for well-known filters (Resample/SSRC) and for well-known encoders (lame/vorbis/neroAAC))
I believe this architecture (AVS->Pipeline->CliEncoder) is MUCH more flexible and extensible then BeSweet.
Doom9
30th November 2005, 17:17
still waiting for a reasonable reply to the questions I have raised. You asked something.. I cannot answer until I have the answer to my questions. Even if you post ten pages of why this new method is so great, these questions do not go away..
dimzon
30th November 2005, 18:13
Basically I need all the options I'm currently using in MeGUI available (downmix, normalization, various codecs without hassle and using 10 different executables, delay). If that can be fullfilled, it could definitely be an option (finally resolving the cutting angle once and for all).
http://www.avisynth.org/FiltersByCategory
delay - there are build-in DelayAudio() filter
downmix is build-in for NicAc3Source and NicDtsSource.
Other downmix modes can be implemented in external AviSynth plugins or, maybe using MixAudio/GetChannel combination
normalization - there are build-in Normalize() filter
codecs:
AAC -> FAAC/NAAC/WinAmpAAC
Vorbis -> EncVorbis
MP3 -> LAME
mp2 -> tooLame
Speex -> SpeexEnc
MANY -> mencoder (!)
Any other encoder with cli interface and stdin support
stax76
30th November 2005, 18:55
it will require .NET 2.0 Framework. It's still not available for all windows regionalized versions.
Why would you want a localized .NET? Can't the english version be installed on all systems? If a chinese user crashes your app how do you gonna read the stacktrace?
Sharktooth
30th November 2005, 19:18
.NET 2.0 is installed thru windows update for the majority of users.
Windows update installs only the localized versions of the updates (including .NET).
So maybe compiling for .NET 2.0 is still too early until it gets widely spread.
Randall
30th November 2005, 19:39
May I suggest having a "default" or basic avisynth script that can be chosen in MeGUI. Much like the GordianKnot one, with deinterlacing, reverse teleclineing, and cleaning, options etc. THe cropping and resizing come from user selected options, wich is great, but perhaps it might not be a bad idea to supply a "generic" avisynth script for us newbs.
An even cooler idea would be to have script "pieces" that the user could choose. Break them down into categories like Cleaning, Deinterlacing, etc. Then the choices could get concationated into one avisynth script (assuming the choices made do not conflict with one another.) Just a thought.
stax76
30th November 2005, 19:54
.NET 2.0 is installed thru windows update for the majority of users.
Windows update installs only the localized versions of the updates (including .NET).
So maybe compiling for .NET 2.0 is still too early until it gets widely spread.
That depends mainly on how many project make the switch, so far I know MediaPortal, SharpDevelop and StaxRip of course. Since VS 2005 targets .NET 2.0 and SharpDevelop 2.0 around the corner also targeting .NET 2.0 I'm expecting a rather fast adoption.
charleski
30th November 2005, 20:45
May I suggest having a "default" or basic avisynth script that can be chosen in MeGUI. Much like the GordianKnot one, with deinterlacing, reverse teleclineing, and cleaning, options etc. THe cropping and resizing come from user selected options, wich is great, but perhaps it might not be a bad idea to supply a "generic" avisynth script for us newbs.
An even cooler idea would be to have script "pieces" that the user could choose. Break them down into categories like Cleaning, Deinterlacing, etc. Then the choices could get concationated into one avisynth script (assuming the choices made do not conflict with one another.) Just a thought.
Um, that's been my aim with the changes I made to the avisynth creator. It produces output similar to what you'd get with GK, only without all the unused stuff that's commented out. If you decide you want to change the way you handle the video, you need to recreate the script. One of my goals is to add a script function import feature as well, but there are other things I need to do first.
While GK provides a backbone, I too often find that I tweak the parameters by loading the avs into VirtualDub and into Notepad (Notepad2 actually), make a change then reopen, etc etc. I'd like to be able to provide all that functionality inside MeGUI with the Preview window, but it will take some work.
[Edit]
More patches
0.16 30 Nov 2005
Fixed the library calls so that users who have dgdecode.dll in the same dir as MeGUI won't experience a crash (TBH I was being sloppy in not cleaning up the library code). Users should still be encouraged to remove dgdecode.dll from their MeGUI directory for future compatibility reasons.
Fixed the check for presence of the Progress window so that update events won't be sent to it if it's not there.
0.15 29 Nov 2005
Removed trellis in turbo mode (Sharktooth)
Fixed file filter for the dialog to open stats files (was reading them as .log, but was writing them as .stats)
Added more info to one of the level violation warnings
Fixed the automatic dgindexer dialog call so that it won't close the avisynth script window if the dialog is cancelled
Added extra case variants to the MPEG input filter in avisynth script creator
Modified Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-ChngdFlsCK0.16.rar)
.Net 1.1 binaries (http://homepages.nildram.co.uk/~cajking/MeGUI-src.0.2.3.1b-BinsCK0.16.rar) (No-one's said if these work or not, so I assume they do.)
@doom9: Can we sort out some decision over the major.minor.build.revision Assembly info? I've been simply adding my own version numbers to the version string that displays in the main window so that people can distinguish between different versions, but it would be best to integrate this into the Assembly info. ATM MeGUI builds display a nonsense file version as this hasn't been set in the program (ie myAssemblyName.Version = new Version("0.2.3.<betaversion>"); ). Since this is your project I'll leave that to you to decide.
Doom9
1st December 2005, 00:02
@Dimzon: Are you still working on bePipe? And I take it that since it has pipe in its name it'll pipe the data itself? It would be quite a hassle to support all the encoders you listed and not only worry about different commandlines, but extract a progress report from each of them, so that's where a common interface would come in handy. Perhaps you could even wrap around encoder dlls rather than the commandline tools? There is an example of a lame based encoder on codeproject ready to be used, all in C#.
There are not many audio options in MeGUI, basically downmix (or lack thereof), gain, delay correction (I'm assuming delayaudio works with all kind of audio input and supports both negative and positive values) and that is it. Assuming this all works with trimmed scripts as well, we may have something great here.
but it would be best to integrate this into the Assembly info.Is there a way to make sensible use of that? I don't have a clue where the build revision shows up.. I just know the build number goes up every time I recompile.
charleski
1st December 2005, 00:42
Is there a way to make sensible use of that? I don't have a clue where the build revision shows up.. I just know the build number goes up every time I recompile.
Just set it in AssemblyInfo.cs, eg:
using System.Reflection;
using System.Runtime.CompilerServices;
//
// General Information about an assembly is controlled through the following
// set of attributes. Change these attribute values to modify the information
// associated with an assembly.
//
[assembly: AssemblyTitle("MeGUI")]
[assembly: AssemblyDescription("GUI frontend for video encoding")]
[assembly: AssemblyConfiguration("")]
[assembly: AssemblyCompany("")]
[assembly: AssemblyProduct("")]
[assembly: AssemblyCopyright("Licensed under GPL")]
[assembly: AssemblyTrademark("")]
[assembly: AssemblyCulture("")]
//
// Version information for an assembly consists of the following four values:
//
// Major Version
// Minor Version
// Build Number
// Revision
//
// You can specify all the values or you can default the Revision and Build Numbers
// by using the '*' as shown below:
[assembly: AssemblyVersion("0.2.3.16")]
Doom9
1st December 2005, 01:05
and then? except for looking at the source code, how will anybody know which build he/she is using?
charleski
1st December 2005, 01:43
and then? except for looking at the source code, how will anybody know which build he/she is using?
It shows up in the tooltip that pops up when you hover over the file in Explorer. It also shows in the Version tab of the Properties page in Explorer.
stax76
1st December 2005, 01:59
You got to fill out [assembly: AssemblyProduct("")] (can be done using the designer (project options dialog)) if you support input files from the cmdl. Without your application will show up screwed (no caption at all) under "Open With" in the Windows explorer context menu. I learned about this the hard way.
Sharktooth
1st December 2005, 04:48
source and bins rebuilt and repackaged here: http://files.x264.nl/Sharktooth/?dir=./megui
so, do you think moving the project to .NET 2.0 will be ok?
dimzon
1st December 2005, 10:31
Are you still working on bePipe?
No! It's VERY easy application - it's nothing to do more...
And I take it that since it has pipe in its name it'll pipe the data itself?
No! BePipe just sent audio from AVS to stdout. But BeHappy do it (BeHappy does'nt use BePipe)
It would be quite a hassle to support all the encoders you listed and not only worry about different commandlines, but extract a progress report from each of them
I believe You does'nt need to extract progress report from encoder. You can analyse 100*nSamplesSentToPipe/nOverallSamplesCount - it not VERY preciese but good enought (look how it works in latest foobar2000 beta - BeHappy GUI ideology is stolen from it)
Perhaps you could even wrap around encoder dlls rather than the commandline tools?
It's possible in future...
delay correction (I'm assuming delayaudio works with all kind of audio input and supports both negative and positive values)
Yes! It works fine!
this all works with trimmed scripts as well
What does trimmed scripts means in current context?
dimzon
1st December 2005, 10:46
Other downmix modes can be implemented in external AviSynth plugins or, maybe using MixAudio/GetChannel combination
downmix-related thread
berrinam
1st December 2005, 11:02
An idea I've been experimenting with is AVS profiles. They would be similar to video/audio profiles in MeGUI, and the information they would store is:
-a template script. This is the main part of the profiles, and it would mean that a particular filter or set of filters could be included in every encode, without MeGUI having to be specifically aware of them, the way it is of the denoising/deinterlacing filters at the moment. This would be human-editable and could look something like this:
<source>
<crop>
subtitle("This is a filter included in every encode")
<resize>MeGUI would then replace <source> with the appropriate DGDecode() function, and <crop> with the appropriate crop function, similarly with deinterlace, denoise, resize and possible deblock, covering everything that is currently in the gui.
-The profiles would also store which of the deinterlace, resize and denoise filters are used.
-This would also come with a Default Profile which would behave exactly the way the gui currently does
The idea behind this is it makes it easy to distribute customizable avs scripts, and to allow users to add a filter to each script, without MeGUI itself having to be changed. More customisability.
What do you think?
charleski
1st December 2005, 11:09
An idea I've been experimenting with is AVS profiles.Sounds good, I'd been wondering if there were a way for more advanced users to put in certain script blocks automatically, but couldn't think of a method to do it easily. Your idea sounds like a plan.
Doom9
1st December 2005, 11:30
so, do you think moving the project to .NET 2.0 will be ok?Well, I'd like to but I'm also a bit concerned that a lot of people will have to upgrade. Even I am still using VS 2003 and have no immediate plans to upgrade. It might come though when I get my PC at work re-setup again, and encrypted remoting channels would sure come in handy at work.
I believe You does'nt need to extract progress report from encoder. You can analyse 100*nSamplesSentToPipe/nOverallSamplesCount - it not VERY preciese but good enought (look how it works in latest foobar2000 beta - BeHappy GUI ideology is stolen from it)Hmm.. and how do I know how many samples I'm sending? You wrote in the other thread that you are porting avs2wav to C#, is Behappy the result of that (in other words, is it written in C#? It looks rather VB'ish).
What does trimmed scripts means in current context?Well, I mean what happens if I make creative use of trim commands to cut out stuff (e.g. you have a TS stream captured of your favorite TV show, and you want to cut out the commercials.. now instead of having to resort to an MPEG-2 cutter, you could simply demux the whole thing in DGIndex, then create an AviSynth script from it and cut from within AviSynth making use of the trim commands, so that in the end you have excluded the ads frame-accurately without the hassle of actually having to cut anything or re-encode anything because the ad didn't start at an I-frame).
Personally I have little use for filtering that goes beyond what the GUI currently offers, but if there's an interested for this template idea, it does sound interesting. My only concern is that MeGUI shouldn't become a full blown AviSynth script editor which would confuse most users - there will always be those that will use an external editor because of all the advanced functionality they need.
dimzon
1st December 2005, 11:44
Well, I'd like to but I'm also a bit concerned that a lot of people will have to upgrade. Even I am still using VS 2003 and have no immediate plans to upgrade. It might come though when I get my PC at work re-setup again, and encrypted remoting channels would sure come in handy at work.
Agreed by 100%! Please, does'nt move to 2.0!
Hmm.. and how do I know how many samples I'm sending?Take look @ BePipe source code (http://www.mytempdir.com/292219)
You wrote in the other thread that you are porting avs2wav to C#, is Behappy the result of that (in other words, is it written in C#? It looks rather VB'ish).
BePipe is result of porting avs2wav to C# (it's my first experiment), BeHappy is enhanced BePipe... Yes, BeHappy is pure C# apllication, take look @ source code (http://www.mytempdir.com/292219)
Doom9
1st December 2005, 11:56
@Dimzon: Alright, that does sound interesting. In the interest of not breaking anything, I think it would be prudent to continue to work on BeHappy first and to fully separate the processing and the GUI part, focusing mainly on the processing part which could be turned into a library, thus allowing multiple frontends. Once the library has been properly tested, it could then be used to replace the current audio encoding part. Since this encoding method is rather new, I think we should first make sure all the kinks have been worked out. In course of time, the library could also be modified to use other libraries for encoding rather than piping the data from AviSynth to stdin of an encoder program, but the library approach would mean no change in other software.
dimzon
1st December 2005, 12:03
fully separate the processing and the GUI part
Just look @ internal class Encoder in MainForm.cs ;)
Chainmax
1st December 2005, 17:11
Shouldn't the link in the 1st page be updated?
charleski
2nd December 2005, 03:12
New patch.
Avi files can now be loaded directly into the avisynth script creator. Currently this handles only the video element of the file. I may add support for avi demuxing later. A check is made via DirectShow's graphedit to ensure that the file can be rendered with the installed filters, but it is still possible that DirectShowSource could fail - I myself suffered this problem with at least one version of ffdshow, but changing to a different build solved it. The avi support includes a means of telling DirectShowSource what fps to use for those filters that don't supply it, as well as an option for FlipVertical().
Also note that I've altered the revision numbering system to something more logical.
Changelog:
0.3.2.1017 2Dec 2005
Added AVI and vdr (VirtualDub frameserver) support. Will need to clean up any unneeded interface code later. [If anyone wants to pitch in on this please feel fee]
Added MPEG2 colour correction using Wilbert's ColorMatrix function.
Fixed 'suggest resolution' for cases in which no DAR is specified.
Changed Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.ChngdFls_0.3.2.1017.rar)
.NET 1.1 bins (http://homepages.nildram.co.uk/~cajking/MeGUI.NETv1.1.Bins_0.2.3.1017.rar)
This patch works on the avis I've tested it on, but all the ones I have to hand are standard well-behaved xvids. Please test this on obscure avi variants if you have any lying around.
Sharktooth
2nd December 2005, 04:28
ehrr... sorry but version is 0.2.3.1017
repacked 1.1 NET bins and sources at usual place http://files.x264.nl/Sharktooth/?dir=./megui
dimzon
2nd December 2005, 10:54
and then? except for looking at the source code, how will anybody know which build he/she is using?
public MainForm()
{
//
// Required for Windows Form Designer support
//
InitializeComponent();
//
// TODO: Add any constructor code after InitializeComponent call
//
this.Text = ProductName + " v" + ProductVersion;
}
Doom9
2nd December 2005, 10:57
oh, so these are global variables taken from the assembly file? Then I guess why not.
dimzon
2nd December 2005, 10:59
oh, so these are global variables taken from the assembly file? Then I guess why not.
What does You talk about?
berrinam
2nd December 2005, 12:15
I've done the avs templates I spoke about earlier. They are built on the sources Sharktooth distributed of version 0.2.3.1017. I've attached the modified files. It all works basically the way I described earlier.
@charleski: I commented out the loadScript sections you seem to have added. Sorry :confused:, but it seems just as easy to keep all plugins in the Avisynth plugin dir, and it's confusing to keep track of all the plugins with templates, because you are never sure exactly which filters will be used.
@edit: since the attachment has to be approved first, I hosted it on rapidshare as well. Grab it here (http://rapidshare.de/files/8478116/changed.7z.html)
Doom9
2nd December 2005, 12:20
What does You talk about?I'm neither holy nor royalty, so you can safely use lower case ;) I was refering to your above post but that doesnt seem to be working for me. How do you extract stuff like the AssemblyProduct from the AssemblyInfo.cs and use it in another place? Oh and by the way, there's that rule about signature size.. yours takes an excessive amount of space. I'm an MCP, too, but that's no reason to take up all that space.
stax76
2nd December 2005, 12:21
AssemblyFile.cs normally is generated by the designer, AssemblyVersion and AssemblyFileVersion is then accessed from System.Windows.Forms.Application and System.Reflection.Assembly IIRC. Usually I set both the same and access it from the Application class only. Please let me know if you need some sample code.
dimzon
2nd December 2005, 12:49
How do you extract stuff like the AssemblyProduct from the AssemblyInfo.cs and use it in another place?
http://msdn2.microsoft.com/en-us/library/system.windows.forms.control.productversion.aspx
http://msdn2.microsoft.com/en-us/library/system.windows.forms.application.productversion.aspx
.NET Framework make great work for You!
Oh and by the way, there's that rule about signature size.. yours takes an excessive amount of space. I'm an MCP, too, but that's no reason to take up all that space.
Ok, i will edit my signature a little later
stax76
2nd December 2005, 13:00
.NET Framework make great work for You!
VS 2005/.NET 2.0 even greater ;), you noticed Express Version is free for now?
charleski
2nd December 2005, 13:22
@berriman: re the LoadPlugin stuff - The problem is that I've been aiming the avisynth creator at people who are upgrading from GordianKnot. Both GK and AutoGK place all the filters in a different directory to avisynth's defined plugins dir, and then load them in as needed. I suspect len0x did this partially as a hold-over from the pre-2.06 days and partially so that he could distribute a single package that would ensure the program was working with versions of the plugins that it knew about (for instance the latest version of decomb has had its syntax changed).
I agree there's no real reason we need to continue doing things the way len0x did, and it does ultimately make things simpler to keep all the plugins in the place avisynth expects them to be, but we need to make sure that's highlighted in the documentation, or people are going to be posting complaints about the scripts not working because they don't realise what's changed. We do need to load the specific dgdecode.dll from the DGMPGDec directory - as I've said before, it's bad practice to require users to copy out dgdecode.dll to different places when they upgrade it.
@doom9: You can access the assembly attributes using Attribute.GetCustomAttribute(assembly,type). I'll add some code in the next patch to read that data in Form1.cs and set the main window that way so that upfdates to the version need only happen in the attribute.
[edit] Though yeah, dimzon's method is a bit easier, I'll use that.
BTW, I see no-one's claimed the grand prize yet by spotting the minor-yet-deadly flaw in the last patch. I realised I'd left it out right after I posted, but it was late.
Doom9
2nd December 2005, 13:34
but we need to make sure that's highlighted in the documentationI guess that's the main problem, educating the user. I still recall all he complaints about loadplugin not being int the script because people only know the GKnot scripts, whereas I develop on multiple machines that have plugins in different locations so transferring scripts always caused issues until I got rid of loadplugin paths.
Sharktooth
2nd December 2005, 14:16
I have problems enabling styles with .NET 2.0 in MeGUI.
I added all the stuff (i think) but the new style doesnt show up.
In the meantime i made a gui (for the ultra-lazyest lazy user) made in C# for .NET 2.0 for avc2avi.
i'm going to add it to my x264 builds as soon as i sort the MeGUI styles problems.
dimzon
2nd December 2005, 14:27
Hi! I have an idea how to turn MeGUI into very flexible and extensible application! The answer is short - plugins
take look @ technology demo (binaries & sources): http://www.mytempdir.com/294485
first run ExtensibilityDemo.Application alone
http://img525.imageshack.us/img525/3388/a07tc.gif
then close it and place ExtensibilityDemo.SamplePluginLib.dll and/or ExtensibilityDemo.SamplePluginLibInVB.dll to the execution folder and run it again.
http://img489.imageshack.us/img489/8555/a21uu.gif
Amaising, is't it.
How does it work:
ApiDefinition.dll contains definition for 2 custom attributes and 1 interface.
ExtensibilityDemo.Application on startup perform directory scan to search all assemblies marked with IsAsseblyWithPlugin custom attribute. When it found such assembly it scan this assembly in order to find types marked by IsPlugin custom attribute. For detail look @ loadPlugins() method in ExtensibilityDemo.Application.
Reflection is great, is'nt it?
stax76
2nd December 2005, 15:25
Extensibility generally is great. I have quite a bit experience with extensibility and reflection and can tell you doing it right is not so easy and it ain't easy to maintain either so I would think about it twice.
dimzon
2nd December 2005, 15:28
Extensibility generally is great. I have quite a bit experience with extensibility and reflection and can tell you doing it right is not so easy and it ain't easy to maintain either so I would think about it twice.
It's really easy if You exactly know how it works...
stax76
2nd December 2005, 16:03
It's really easy if You exactly know how it works...
Did you design a extensible apllication? I did and found it was not so easy. Maybe it's easy for simply applications but if you try to allow plugin authors to extend classes that must be serialized as settings as well being hosted in lists things get more and more complicated. All this would be needed if I would support plugins in StaxRip that provide additional preparers, encoders, muxers and things. You got to use adapter patterns, custom serialization and stuff. I know how all this works but rather try to make my application flexible enough without plugins and scripting. There are a lot traps like serialization finds assemlies only within the startup dir unless the AppDomain is configured for it.
dimzon
2nd December 2005, 16:09
Did you design a extensible apllication?
This is my primary work for past 5 years! I'm lead developer of instrumentation tools in our company :)
There are a lot traps like serialization finds assemlies only within the startup dir unless the AppDomain is configured for it.
public virtual event ResolveEventHandler AssemblyResolve
charleski
2nd December 2005, 16:51
It's really easy if You exactly know how it works...This does look interesting, but you've put your finger on the real problem - it would have to be written by someone who knows exactly how it works, i.e. you :D .
dimzon
2nd December 2005, 18:16
This does look interesting, but you've put your finger on the real problem - it would have to be written by someone who knows exactly how it works, i.e. you :D .
First step - which interfaces/classes does whe need to move in plugins.
MeGUI is job-based tool so there are such abstract classes/interfaces:
Job - some abstract job to add to joblist
JobExecutor - yet another abstract class. Seems like Job implementation must provide concrete JobExecutor implementation
JobProvider - some visible GUI to create and add job's. Must provide save/load state functionality.
Second step - which interfaces/classes MeGUI must provide for plugins:
JobPlanner - some class/interface with method AddJob(AbstractJob jobToAdd)
WellKnownFilenames provider - yet another idea/improvement. If I want to perform full DVD-backup i need to encode audio, encode video then mux then together. But I can't - schedule mux job - audio/video files does'nt exist! WellKnownFilenames provider must provide list of "files to be created after pending job completion" to allow choose this files in GUI for planning.
stax76
2nd December 2005, 19:11
The basic architecture of the sample is correct but there are quite a few things that can be done better e.g. creating objects using System.Activator and performance wise there is much room for improvement, some techniques are described here (http://msdn.microsoft.com/msdnmag/issues/05/07/Reflection/default.aspx).
Job - some abstract job to add to joblist
This yields the problem I described, let's say you inherit from job (or maybe profile) in your plugin and later remove that plugin. As result the entire deserialization will fail unless you do custom serialization. I would host the objects in a class implementing IList and ISerialization and save the stream of a serialized object in the list in a byte array so if a object in the list cannot be deserialized because the assembly no longer exists the other objects in the list can still be deserialized.
My biggest gripe with plugins is all the additional work involved to expose interfaces and breaking changes that hardly can be avoided if you want clean code and progress. Just lost half of my Firefox plugins after updating to 1.5. It must be very annoying for a plugin author if there are often breaking changes.
dimzon
2nd December 2005, 19:32
This yields the problem I described, let's say you inherit from job (or maybe profile) in your plugin and later remove that plugin. As result the entire deserialization will fail unless you do custom serialization. I would host the objects in a class implementing IList and ISerialization and save the stream a serialized object in the list in a byte array so if a object in the list cannot be deserialized because the assembly no longer exists the other objects in the list can still be deserialized.
Never use Binary Serialization for "save configuration" puposes! It can be broken even if your assembly still binary compatible (change/remove/add internal/private members to class). Binary Serilization is for short-term serialization for marshaling/network transmission puposes ONLY!!!!
I strongly recommend to use XmlSerializer and perform per-item serialization!
dimzon
2nd December 2005, 19:47
@Doom9
Why not to use SF and CVS for collective work?
Sharktooth
2nd December 2005, 20:16
maybe we'll have a SVN soon.
SF and his CVS are slow as hell and the mantainence is a pain.
stax76
2nd December 2005, 20:39
Never use Binary Serialization for "save configuration" puposes! It can be broken even if your assembly still binary compatible (change/remove/add internal/private members to class). Binary Serilization is for short-term serialization for marshaling/network transmission puposes ONLY!!!!
Last time I tried XML serializer it was very problemlematic to use with complex object graphs using things like generics, polymorphic objects within lists, hashtables or dictionaries etc. Maybe it was improved for 2.0 and maybe with enough experience XML serializing can work but I see absolutely no problem using binary serialization. There is no limit to the complexity of your object graphs, it will work, it will run fast and it won't riquire customizations like polymorphism with the xml serializer. Things like xml serializer calls ctor on deserialize usually yields awkward code. IIRC future .NET versions will be compatible with the 2.0 binary formatter. If you change fields you can call reflection to the rescue either by applying OptionalFieldAttribute (2.0 ;) or cleaner and better as missing or breaking fields with initializer get automatically instantiated:
Public Class Foo
Implements ISerializable
Public Sub New(ByVal info As SerializationInfo, ByVal context As StreamingContext)
For Each i As FieldInfo In Me.GetType.GetFields()
Try
i.SetValue(Me, info.GetValue(i.Name, i.FieldType))
Catch
End Try
Next
End Sub
Public Sub GetObjectData(ByVal info As SerializationInfo, ByVal context As StreamingContext) Implements ISerializable.GetObjectData
For Each i As FieldInfo In Me.GetType.GetFields()
info.AddValue(i.Name, i.GetValue(Me))
Next
End Sub
End Class
Of course if you have critical data that is never allowed to break you don't want to use binary serialization but for a application like MeGUI that's not really a problem.
berrinam
2nd December 2005, 21:49
Perhaps the main thread could be updated with the new bins?
Also, I, too, support setting up SVN for MeGUI.
charleski
2nd December 2005, 22:10
Well, I've been assuming that people have been beta-testing all the changes I've made (especially the avi-import stuff please!). I've corrected all the issues that I've found or have been reported so far.
I have one more patch to post, but if all this stuff works, it's time to move the build number up a notch IMO, but I'll leave that in doom9's hands.
[edit]
Ok, current patch status:
0.3.2.10018 2 Dec 2005
Forced avs output to YV12 - No-one wins the grand-prize, guess that saved me some cash!
Restructured the code to open a video source in order to accomodate opening the dialog with a source already
specified.
Altered the formation of the main window's title. Version changes need only be set in AssemblyInfo.cs now.
Added berriman's avs script profile changes. (Move your avisynth plugins!) - Fixed it to load dgdecode from the DGMPGDec directory
Changed Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.ChngdFls_0.3.2.1018.rar)
Antiquated .NET 1.1 bins (http://homepages.nildram.co.uk/~cajking/MeGUI.NETv1.1.Bins_0.2.3.1018.rar)
[another edit] Grah - that's 0.3.2.1018
Doom9
2nd December 2005, 23:25
My notebook started going nuts when I was on my way home, playing movies was no longe possible (abysmal performance), and while VS also had a lot of issues, I still managed to take care of one of the pending issues that've been bugging me in megui. The following makes the "show progress window" option in the view menu context sensitive:
add new private variable to Form1.cs
private bool isPwVisible = false;
In Form1.cs, method public bool startEncoding(Job job) add
this.isPwVisible = true;
to all three instances of the if:
if (this.settings.OpenProgressWindow)
in mnuView_Popup
replace
if (pw != null)
with
if (pw != null && !this.isPwVisible)
in mnuViewProcessStatus_Click
add
this.isPwVisible = true;
In ProgressWindow.cs
change
public delegate void WindowClosedCallback();
to
public delegate void WindowClosedCallback(bool hideOnly);
In OnClosing(CancelEventArgs e)
replace the code with the following
if (this.IsUserAbort)
{
e.Cancel = true;
this.Hide();
WindowClosed(true);
}
else
{
WindowClosed(false);
base.OnClosing (e);
}
charleski
3rd December 2005, 00:16
@doom9 I've been trying to integrate your changes, but I get the error:
Error 11 No overload for 'pw_WindowClosed' matches delegate 'MeGUI.WindowClosedCallback'
I think I've drunk too much wine to work this out tonight, and I'm not an MCP, my doctorates are in biology, heh.
Doom9
3rd December 2005, 00:42
Error 11 No overload for 'pw_WindowClosed' matches delegate 'MeGUI.WindowClosedCallback' Means you didn't patch everything or didn't tell me enough about the error (as in which file.. which method).
Sharktooth
3rd December 2005, 04:44
Charleski version is 0.2.3.1018 not 0.3.2.1018
However the http://files.x264.nl/Sharktooth/?dir=./megui link contains always the latest .NET 1.1 bins (made with .NET 1.1 SDK c# compiler - csc) and the changed files from the original 0.2.3.1b sources.
charleski
3rd December 2005, 04:53
Charleski version is 0.2.3.1018 not 0.3.2.1018
Ok, the fact that it took me 10 minutes to realise that 0.2.3 != 0.3.2 means i should probably look at this code tomorrow...
Sharktooth
3rd December 2005, 05:02
It's just the archive filename that's wrong... the right version number is 0.2.3.1018. The code is ok.
berrinam
3rd December 2005, 11:52
The Avisynth Script Creator window now doesn't open; a NullReferenceException due to the mainForm member being accessed when it is still null. To fix, move this.mainForm = mainForm; from about the middle of AviSynthWindow.<init> to the beginning of that constructor.
berrinam
4th December 2005, 09:58
ChronoCross posted (http://forum.doom9.org/showthread.php?p=746176#post746176) a bug report which seems to cause MeGUI to crash when opening an avs file. This is caused by the two following lines in VideoPlayer.InitializeComponent: ((System.ComponentModel.ISupportInitialize)(this.videoPreview)).BeginInit(); and ((System.ComponentModel.ISupportInitialize)(this.videoPreview)).EndInit(); While they could simply be deleted, perhaps a better way to fix this problem is to force VS to regenerate the InitializeComponent code, by moving some components around.
Sharktooth
5th December 2005, 15:20
as a quick workaround for my x264 builds i commented that lines out.
1.1 .NET binaries at the usual place ( http://files.x264.nl/Sharktooth/?dir=./megui ). sources are not updated.
edit: the avc2avi GUI i was talking of some posts above... this is the .NET 1.1 version: http://files.x264.nl/Sharktooth/utils/avc2avi_rev267+gui.7z
The .NET 2.0 version with default style looks much better though.
charleski
5th December 2005, 19:10
ChronoCross posted (http://forum.doom9.org/showthread.php?p=746176#post746176) a bug report which seems to cause MeGUI to crash when opening an avs file. This is caused by the two following lines in VideoPlayer.InitializeComponent:
I tracked down the cause of this:
PictureBox.System.ComponentModel.ISupportInitialize.BeginInit Method
...
Note: This method is new in the .NET Framework version 2.0.
Aargh. - the Forms Designer automatically adds .NET 2.0-only code, and the .NET 1.1 compiler wasn't detecting this particular problem at compile-time.
@doom9: I worked out what else needed to be added to your changes. Since you added a parameter to the WindowClosedCallback delegate, then
private void pw_WindowClosed()
{
pw = null
}
in Form1.cs needs to change to
private void pw_WindowClosed(bool hideOnly)
{
this.isPwVisible = false;
if (!hideOnly)
pw = null;
}
if I'm reading your intentions correctly.
Doom9
5th December 2005, 19:20
if I'm reading your intentions correctly.Yup, that's it. Did I miss that? It appears so.
charleski
5th December 2005, 19:35
I've added it into the source, but I'm playing around with getting the preview window to resize atm.
Doom9
5th December 2005, 20:04
what's wrong with the preview window? it resizes just fine here.
charleski
5th December 2005, 20:18
You can pull out a corner and resize the video? That's weird, I can' do that at all.
Sharktooth
5th December 2005, 20:24
i cant.
Doom9
5th December 2005, 20:27
why would you want to do that anyway? It's nice to know how big your video will finally be like, no?
Sharktooth
5th December 2005, 20:33
However, i fixed the style thing for .NET 2.0 only. with 1.1 styles are partially applied (only on tabs and menus).
any ideas?
.NET2.0 with styles:
http://www.webalice.it/f.corriga/temp/styled_megui.png
... looks much better :)
charleski
5th December 2005, 20:49
why would you want to do that anyway? It's nice to know how big your video will finally be like, no?
Well, it's good to know what your actual encoded size will be, but I often zoom the video up to tweak filter settings and deinterlace thresholds before encoding. I know you're obviously seeing the same thing, but it helps when working on a relatively small laptop screen.
@sharktooth: All I know is that there are quite a few .Forms Control properties that are only available in .NET 2.0, like UseVisualBackColor.
haubrija
6th December 2005, 05:14
Quick bug report using 0.2.3.1018
In the AVS Creator, upon clicking the IVTC option, the creator adds this line.
Telecide(guide=1).Decimate()
In actuallity, it should add this line.
Telecide(order=1,guide=1).Decimate()
FYI
Doom9
6th December 2005, 09:21
Telecide(order=1,guide=1).Decimate():The order thing rings a bell but that doesn't appear to be mandatory as I just used IVTC in MeGUI yesterday and it worked out just fine.
foxyshadis
6th December 2005, 10:19
Order is TFF/BFF and if it's not given it'll use whatever avisynth thinks it is, which mpeg2source will set correctly. So always using order=1 could actually get you into trouble with BFF sources.
charleski
6th December 2005, 12:11
Quick bug report using 0.2.3.1018
In the AVS Creator, upon clicking the IVTC option, the creator adds this line.
Telecide(guide=1).Decimate()
In actuallity, it should add this line.
Telecide(order=1,guide=1).Decimate()
FYI
Upgrade your Decomb filter to the latest version 5.2.2 from Donald Graft's site.
It no longer uses the order parameter.
[BTW, this is mentioned in the changelog, and I'll be ading some code to extract the correct TFF/BFF decision from the d2v.]
dimzon
6th December 2005, 18:46
@Doom9
Does You look @ internal class Encoder @ BeHappy source? Does You still need more? I believe - 30 minutes is enought to make it MeGUI.Encoder descendant ;)
Sharktooth
6th December 2005, 18:53
Dimzon: please do not push ppl doing something. everyone have it's own business and maybe he had no time to check it.
Doom9
6th December 2005, 19:43
@Dimzon: unfortunately I'm both swamped at work, and at home. A codec comparison takes a great deal of time, especially if you have a considerable list of potential codecs that you need to put through a qualification phase. This year's comparison effectively started last week and there is little chance I get to write any line of MeGUI code until the end of the year. But here's one:
In Calculator.cs, find the method codec_CheckedChanged and add updateBitrateSize(); so that the bitrate gets updated when switching between XviD and other codecs (XviD considers bitrate = raw bitstream bitrate, for all other codecs bitrate = final size / length).
And here's how I think the tri-state thing should finally look like (mind you the method may be incomplete and was never tested)
private void x264TriStateAdjustment(x264Settings xs)
{
if (xs.EncodingMode != 2 || xs.EncodingMode != 5)
xs.Turbo = false;
if (xs.Turbo)
{
xs.NbRefFrames = 1;
xs.SubPelRefinement = 0;
xs.METype = 0; // diamond search
xs.I4x4mv = false;
xs.P4x4mv = false;
xs.I8x8mv = false;
xs.P8x8mv = false;
xs.B8x8mv = false;
xs.AdaptiveDCT = false;
xs.MixedRefs = false;
xs.BRDO = false;
xs.Trellis = false;
}
if (!(xs.EncodingMode == 1 && xs.Profile == 2)) // lossless requires CQ mode
xs.Lossless = false;
else
xs.BitrateQuantizer = 0;
if (xs.NbRefFrames <= 1) // mixed references require at least two reference frames
xs.MixedRefs = false;
if (xs.NbBframes < 2) // pyramid requires at least two b-frames
xs.BFramePyramid = false;
if (xs.NbBframes == 0)
xs.AdaptiveBFrames = false;
if (!xs.Cabac) // trellis requires CABAC
xs.Trellis = 0;
if (xs.NbBframes == 0)
xs.WeightedBPrediction = false;
if (xs.NbBframes == 0 || xs.SubPelRefinement < 5) // BRDO requires RDO and b-frames
xs.BRDO = false;
if (!xs.P8x8mv) // p8x8 requires p4x4
xs.P4x4mv;
}
The same method could be used in x264ConfigurationDialog.cs where instead of using x264Settings you access the GUI elements. This allows grouping of all related code in a single method that can be called in showCommandLine. Then GUI element events basically just call showCommandLine
charleski
6th December 2005, 21:08
MeGUI 0.2.3.1019
Changelog:
0.3.2.1019 6 Dec 2005
Changes by doom9 to make show progress window context sensitive.
Added resizing to the video preview window.
(The resizing is not really as pretty as I'd have liked, but after trying several approaches I think it's impossible to get a smoother result without moving up to .NET 2.0 which has some important improvements in how it handles these events.)
Changed Files (http://homepages.nildram.co.uk/~cajking/MeGUI-src.ChngdFls_0.3.2.1019.rar)
.NET 1.1 bins (http://homepages.nildram.co.uk/~cajking/MeGUI.NETv1.1.Bins_0.2.3.1019.rar)
This patch doesn't include the changes doom9 suggested above. I'll have to add those next time.
Sharktooth
6th December 2005, 21:53
... MeGUI-src.ChngdFls_0.3.2.1019.rar .... 0.2.3.1019...
charleski
6th December 2005, 22:02
lol, I did it again.
Ok, changed my templates so i won't keep doing that :)
Sharktooth
6th December 2005, 22:16
merged sources and bins are a the usual place though.
however maybe it's time to switch to .NET 2.0?
berrinam
6th December 2005, 22:44
As a general note for coding: in MeGUI, you should use MeGUI.GetDirectoryName as opposed to Path.GetDirectoryName, as (at least in .NET 1.1) you Path.GetDirectoryName will have no trailing slashes, except if the passed parameter is a root directory. This means that generating a filename using this could have two consecutive slashes if the filename is a root directory.
MeGUI.GetDirectoryName (a static function) is simply a wrapper for this function, which removes the trailing slash if it exists.
Also, there's a problem with running a One Click encode. The process will be interrupted, because of a MessageBox that pops up. Removing MessageBox.Show(Environment.GetEnvironmentVariable("PATH"), "Path", MessageBoxButtons.OK); from JobUtil.openVideo should solve that.
Sharktooth
6th December 2005, 22:51
new bins and merged sources are up @ http://files.x264.nl/Sharktooth/?dir=./megui
edit: adding
Application.EnableVisualStyles();
in Main() will partially enable the visual styles on .NET 1.1 and enable all the style effects for .NET 2.0.
Sharktooth
6th December 2005, 23:02
an unhandled exception is triggered when clicking on Avisynth script creator menu entry: ************** Exception Text **************
System.NullReferenceException: Object reference not set to an instance of an object.
at MeGUI.AviSynthWindow.generateScript()
at MeGUI.AviSynthWindow.showScript()
at MeGUI.AviSynthWindow.resizeFilterType_SelectedIndexChanged(Object sender, EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
at MeGUI.AviSynthWindow.set_Settings(AviSynthSettings value)
at MeGUI.AviSynthWindow.avsProfile_SelectedIndexChanged(Object sender, EventArgs e)
at System.Windows.Forms.ComboBox.OnSelectedIndexChanged(EventArgs e)
at System.Windows.Forms.ComboBox.set_SelectedIndex(Int32 value)
at MeGUI.AviSynthWindow..ctor(MeGUI mainForm)
at MeGUI.MeGUI.mnuToolsAviSynth_Click(Object sender, EventArgs e)
at System.Windows.Forms.MenuItem.OnClick(EventArgs e)
at System.Windows.Forms.MenuItemData.Execute()
at System.Windows.Forms.Command.Invoke()
at System.Windows.Forms.Control.WmCommand(Message& m)
at System.Windows.Forms.Control.WndProc(Message& m)
at System.Windows.Forms.ScrollableControl.WndProc(Message& m)
at System.Windows.Forms.ContainerControl.WndProc(Message& m)
at System.Windows.Forms.Form.WndProc(Message& m)
at System.Windows.Forms.ControlNativeWindow.OnMessage(Message& m)
at System.Windows.Forms.ControlNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
************** Loaded Assemblies **************
mscorlib
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/microsoft.net/framework/v1.1.4322/mscorlib.dll
----------------------------------------
megui
Assembly Version: 0.2.3.1019
Win32 Version: 0.2.3.1019
CodeBase: file:///C:/Documents%20and%20Settings/Ebola/Desktop/meguisrc/megui.exe
----------------------------------------
System.Windows.Forms
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.windows.forms/1.0.5000.0__b77a5c561934e089/system.windows.forms.dll
----------------------------------------
System
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
System.Drawing
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.drawing/1.0.5000.0__b03f5f7f11d50a3a/system.drawing.dll
----------------------------------------
System.Xml
Assembly Version: 1.0.5000.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system.xml/1.0.5000.0__b77a5c561934e089/system.xml.dll
----------------------------------------
xuq2gagl
Assembly Version: 0.0.0.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
rg0wr9ln
Assembly Version: 0.0.0.0
Win32 Version: 1.1.4322.2032
CodeBase: file:///c:/windows/assembly/gac/system/1.0.5000.0__b77a5c561934e089/system.dll
----------------------------------------
haubrija
6th December 2005, 23:57
Upgrade your Decomb filter to the latest version 5.2.2 from Donald Graft's site.
It no longer uses the order parameter.
[BTW, this is mentioned in the changelog, and I'll be ading some code to extract the correct TFF/BFF decision from the d2v.]
Ah that must be it. Sorry for the inconvenience.
charleski
7th December 2005, 00:49
an unhandled exception is triggered when clicking on Avisynth script creator menu entry:
Fixed, I think the bug appeared when I put in doom9's progress window changes before one of the variables was assigned.
0.2.3.1020 6 Dec 2005
Altered Path.GetDirectoryName to MeGUI.GetDirectoryName
Removed a redundant piece of debugging code from jobUtil.openvideo
Fixed a bug caused by incorporating the progress window code in the wrong place
[Should add this to the changelog: I also tried putting Application.EnableVisualStyles() in as Sharktooth suggested. It actually makes things look worse for me, but I have a custom theme applied to Windows. Anyway, see what you think.]
0.2.3.1020 changes (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI-src.ChngdFls_0.2.3.1020.rar)
Bins (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI.NETv1.1.Bins_0.2.3.1020.rar)
Sharktooth
7th December 2005, 00:59
you preceded me. i was just working on fixing it.
however i updated the files on x264.nl as well.
dimzon
7th December 2005, 10:13
Still waiting for SVC... How about http://www.gotdotnet.com/
Sharktooth
8th December 2005, 16:16
megui restyling is near completion:
http://files.x264.nl/Sharktooth/megui/megui-styledpix/1.pnghttp://files.x264.nl/Sharktooth/megui/megui-styledpix/3.png
http://files.x264.nl/Sharktooth/megui/megui-styledpix/2.png
Kostarum Rex Persia
8th December 2005, 16:24
It's looks very very nice, Sharktooth.
When you will include all missing options to vfw?
Sharktooth
8th December 2005, 16:32
It's looks very very nice, Sharktooth.
Im working on integrating ms-styles (both from windows and user defined) on MeGUI.
I still have to write a configuration dialog for styles and save them in the MeGUI configuration file...
When you will include all missing options to vfw?
Sorry but i'm not going to add anything to VFW at this time.
charleski
8th December 2005, 16:33
When you will include all missing options to vfw?What missing options?
Sharktooth
8th December 2005, 16:46
What missing options?
He meant VFW has less options than CLI. MeGUI has everything.
x264 --no-fast-pskip would be helpfull (and MeGUI lacks it) though, it helps removing blocks in "bluesky".
Kostarum Rex Persia
8th December 2005, 17:04
Sorry but i'm not going to add anything to VFW at this time.
Ok, thank you for information. But, when, then. After new year? :(
Sharktooth
8th December 2005, 17:29
Maybe never. However you can still use CLI with MeGUI-x264 (or full) and AVC2AVI (both included in my builds) to have a perfectly working AVI file.
dimzon
8th December 2005, 17:38
<offtopic>
Does anybody use http://www.jetbrains.com/img/resharper1_5.gif - The Most Intelligent Add-In To VisualStudio.NET (http://www.jetbrains.com/resharper/) ???
ReSharper makes C# development a real pleasure. It decreases the time you spend on routine, repetitive handwork, giving you more time to focus on the task at hand. Its robust set of features for automatic error-checking and code correction cuts development time and increases your efficiency. You'll find that ReSharper quickly pays back its cost in increased developer productivity and improved code quality.
Sharktooth
8th December 2005, 17:51
no coz it's $$$ware and i'm not sure it's compatible with vs2005.
dimzon
8th December 2005, 17:53
it's compatible with vs2005.
It's only for VS.NET 2003!
Evaluate it for a month - it's really great tool!
Sharktooth
8th December 2005, 17:57
well... i use vs2005 express for MeGUI and vs2005 pro (licensed) for my company projects.
so, i think i should wait for a R# update.
dimzon
8th December 2005, 17:58
well... i use vs2005 express for MeGUI and vs2005 pro (licensed) for my company projects.
so, i think i should wait for a R# update.
I still use vs2003 (waiting for R# update) :)
dimzon
8th December 2005, 18:04
well... i use vs2005 express for MeGUI and vs2005 pro (licensed) for my company projects.
so, i think i should wait for a R# update.
2.0 Beta (supports VS2005) (http://www.jetbrains.net/confluence/display/ReSharper/Download)
dimzon
8th December 2005, 18:42
Hi! I'm trying to create workspace on www.gotdotnet.com for MeGUI development. Is this workspace licence text acceptable?
MeGUI by Doom9 and Doom9 Forum Community
Copyright (C) Doom9, http://www.doom9.org/, http://forum.doom9.org/
This program is free software; you can redistribute it and/or
modify it under the terms of the GNU General Public License
as published by the Free Software Foundation; either version 2
of the License, or (at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License
along with this program; if not, write to the Free Software
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
Or visit http://www.gnu.org/copyleft/gpl.html
Once Workspace has been created, this license cannot be changed.
charleski
8th December 2005, 22:51
I'm working on rationalising and consolidating the tristate GUI code in x264ConfigurationDialog (which is a real PITA) and came across this:
switch (avcProfile.SelectedIndex)
{
...
case 2: // high profile, enable everything
...
if (!quantizerMatrixGroupbox.Enabled)
quantizerMatrixGroupbox.Enabled = false;
Shouldn't that be set to true? I've never used custom quantizer matrices, are they still off-limits?
[edit]nvm, I see it gets set to true lower down in the same case statement...
Is trellis restricted to High Profile?
foxyshadis
9th December 2005, 00:01
Sharktooth: Do you already have plans for rearranging the panels? I have partial ideas on a redesign, but I don't want to waste time on a mockup if you already have your own first.
dimzon
9th December 2005, 11:05
BeHappy is now hosted on www.gotdotnet.com !
Check my signature :cool:
Doom9
9th December 2005, 12:19
@foxyshadis: I tend to think that input is always welcome, and you can never rule out the possibility that whatever you come up with will just be shrugged aside..
Is trellis restricted to High Profile?No, but I think it needs CABAC. You can check what the cabac checkbox does, if there's any interconnection that onCheckedChanged event would be where dependency code would sit.
Sharktooth
9th December 2005, 15:04
I'm working on rationalising and consolidating the tristate GUI code in x264ConfigurationDialog (which is a real PITA) and came across this:
switch (avcProfile.SelectedIndex)
{
...
case 2: // high profile, enable everything
...
if (!quantizerMatrixGroupbox.Enabled)
quantizerMatrixGroupbox.Enabled = false;
Shouldn't that be set to true? I've never used custom quantizer matrices, are they still off-limits?
[edit]nvm, I see it gets set to true lower down in the same case statement...
Is trellis restricted to High Profile?
trellis is cabac dependant. i've already added the correct code for trellis tri-state in a previous patch though.
Sharktooth
9th December 2005, 17:31
Just a note. Next x264 builds will no longer "sport" Adaptive Quantization, coz the bluesky issue can be fixed with --no-fast-pskip (it also gives better quality)
so AQ can be removed in favour of this new option.
Sharktooth
9th December 2005, 19:46
Added NoFastPSkip x264 CLI option (fixes the BlueSky blocking bug and some other loss of details at the cost of encoding speed).
Removed Adaptive Quantization (no longer needed).
patch: http://files.x264.nl/Sharktooth/force.php?file=./megui/megui_nofastpskip_patch.7z
1.1 NET bins: http://files.x264.nl/Sharktooth/force.php?file=./megui/megui_0.2.3.1020_nofastpskip.7z
puffpio
9th December 2005, 21:03
the bins link doesn't work
Sharktooth
9th December 2005, 21:07
fixed... the "+" char isnt parsed correctly by the force.php script... :)
puffpio
9th December 2005, 21:12
thanks!
Sharktooth
9th December 2005, 22:10
Sharktooth: Do you already have plans for rearranging the panels? I have partial ideas on a redesign, but I don't want to waste time on a mockup if you already have your own first.
no... :)
foxyshadis
10th December 2005, 00:19
Isn't AQ useful for more than just the block-mismatches though? I thought it also reduced storage size for more-or-less solid blocks without noticable quality loss. Or does no-fast-pskip do that as well?
charleski
10th December 2005, 01:25
0.2.3.1021 9 Dec 2005
Added a size check to the video player resizing routine to prevent scaling out of the host form boundaries.
Consolidated and rationalised the tri-state dependencies in the x264 Config GUI.
Added Sharktooth's No Fast P-Skip option and removed AQ from x264 Config
Changed Files (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI-src.ChngdFls_0.2.3.1021.rar)
Bins (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI.NETv1.1.Bins_0.2.3.1021.rar)
Consolidating all the GUI dependencies in the x264 Config dialog was a major pain. I've tested as much of it as I could think of, but please check that everything's been caught properly.
Doom9
10th December 2005, 03:05
Consolidating all the GUI dependencies in the x264 Config dialog was a major pain. You betcha.. guess why I never did it.. the mere prospect of it had me put development on hold indefinitely. I'm really glad you guys are picking off the slack
Pasqui
10th December 2005, 12:45
Using MeGUI 0.2.3.1021, in x264 configuration panel, I8x8 High Profile macroblock option is always unchecked. When I check it and close the panel before reopening it, it goes back to unchecked state.
charleski
10th December 2005, 13:29
Thanks for checking, I thought I'd got the logic right, but it goes back to unchecked on re-opening. I'll fix that in the next patch.
Please check for any other combination of events that set the options incorrectly.
[Edit]Found the bug - ordering of the components on intialisation matters and i hadn't altered that accordingly
Entire source (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI-src.0.2.3.1022.rar)
Changed files (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI-src.ChngdFls_0.2.3.1022.rar)
Bins (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI.NETv1.1.Bins_0.2.3.1022.rar)
Sharktooth
10th December 2005, 23:41
Uhm, would it be hard to add the WinAMP AAC+ encoder support to MeGUI?
Doom9
11th December 2005, 00:20
Found the bug - ordering of the components on intialisation matters and i hadn't altered that accordinglyDon't you disable event firing, or at least use of the tri-state checking method during initialization? If you do, you won't have to bother about the order anymore, at the end of loading any settings you trigger the method once with event firing still set so that any GUI changes won't trigger the method again, and there you have it.
Uhm, would it be hard to add the WinAMP AAC+ encoder support to MeGUI?Adding additional encoders is kinda annoying because changes go quite far. And when looking at audio, it might be worth looking into the whole bepipe idea.. that offers a whole new realm of possibilities and the possibility to redesign the audio part (perhaps we should just have two audio codecs, and some settings that decide which encoder is going to be used in the end)
bond
11th December 2005, 01:04
Uhm, would it be hard to add the WinAMP AAC+ encoder support to MeGUI?ic people jumping on winamp, but did anyone actually ever made a comparison showing that winamp aac is any good? if yes, any link, so i can read this up myself?
Sharktooth
11th December 2005, 04:51
Hydrogen audio did (can't find the link though), and the winamp AAC+ encoder is really good.
charleski
11th December 2005, 13:01
0.2.3.1023 11 Dec 2005
Fixed a bug in generation of turbo 1st pass job in automated 2(or 3)-pass mode.
Changed Files (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI-src.ChngdFls_0.2.3.1023.rar)
Bins (http://homepages.nildram.co.uk/~cajking/MeGUI/MeGUI.NETv1.1.Bins_0.2.3.1023.rar)
bond
11th December 2005, 13:24
Hydrogen audio did (can't find the link though), and the winamp AAC+ encoder is really good.i guess i found it:
http://www.hydrogenaudio.org/forums/index.php?showtopic=36868
seems like coding techs he-aac codec, the same way as real's freely available he-aac codec, stumbs nero he-aac to the ground at 64kbps (another proove that nero isnt really a that good aac encoder)
Sharktooth
11th December 2005, 16:05
nero has excellent quality @ 128kbps but not on low bitrates.
the new aac-he2 encoder r0x hard though and it's even better than winamp (but it's not free).
Sirber
11th December 2005, 16:16
@Shark
url?
Sharktooth
11th December 2005, 16:20
Included in Nero7 web release.
@devs: well... i'll add the new nero7 encoder support.
bond
11th December 2005, 16:44
nero has excellent quality @ 128kbps but not on low bitrates.well seems "excellent quality" is not good enough:
according to guru apple beats nero also clearly at 128kbps as written here (http://www.hydrogenaudio.org/forums/index.php?showtopic=38792&hl=)
also even lame mp3 is clearly _better_ (yeah better) than nero aac on classical samples and only slightly worse on non-classical...
also vorbis beats it
the new aac-he2 encoder r0x hard though and it's even better than winamp (but it's not free). any listening test backing this claim or are you relying on the nero devs statements? ;)
m0rc1
12th December 2005, 00:20
The old bug that makes the bottom of the dialogs disappear when clicking on "show commandline" with hi DPI displays has returned.
Davide.
charleski
12th December 2005, 00:55
The old bug that makes the bottom of the dialogs disappear when clicking on "show commandline" with hi DPI displays has returned.
Davide.I'm running 0.2.3.1023 now and can't see any graphical glitches with Show Commandline. Could you post a picture showing this so i know what problem you're having?
Sharktooth
12th December 2005, 14:59
well seems "excellent quality" is not good enough:
according to guru apple beats nero also clearly at 128kbps as written here (http://www.hydrogenaudio.org/forums/index.php?showtopic=38792&hl=)
also even lame mp3 is clearly _better_ (yeah better) than nero aac on classical samples and only slightly worse on non-classical...
also vorbis beats it
any listening test backing this claim or are you relying on the nero devs statements? ;)
Always hydrogen audio.
In the 128k test they used the internet profile that's not quite 128kbps ABR... it's the closest possible choice though.
Vorbis is my preferred choice for audio, but it's not a choice when we use MP4 as container...
Doom9
12th December 2005, 15:50
I'm running 0.2.3.1023 now and can't see any graphical glitches with Show Commandline. Could you post a picture showing this so i know what problem you're having?It's not show commandline, it's the x264 build and switching between tabs in the main GUI if you change your resolution to 120 dpi and reboot (the reboot is mandatory, otherwise it will look just fine). Apparently, minsize at the time it is stored doesn't properly reflect the actual GUI size.
Is there a delta of all changed files since my last release? I'm still using VS 2k3 so I can't take your rar archive and open the project.
Also, what's up with that properties.rar file and all the upgradelog things?
Sagittaire
12th December 2005, 16:15
according to guru apple beats nero also clearly at 128kbps as written here
also even lame mp3 is clearly _better_ (yeah better) than nero aac on classical samples and only slightly worse on non-classical...
also vorbis beats it
And it's only test with guru's ears. Ogg Vorbis is better only and strictly only for guru's ears because it's an subjective test and because guru's ears are not universal ears (certainely good reference but not good overall reference)
Moreover since time that guru makes tests it is now able to recognize the characteristic artefact for each audio codec. It's difficult to make "blind test" if you are able to recognize the competitor ... isn't it?
charleski
12th December 2005, 17:58
The Properties directory appeared as part of the code beriiman added. I archived it in case it was important. berriman's avs-profile stuff doesn't work quite as I'd expect it to and probably needs a bit of work, but I haven't looked at the code for it. The upgradelog is just the report from conversion to VS2005.
Changes from 0.2.3.1b are here (http://homepages.nildram.co.uk/~cajking/MeGUI/meGUI.0.2.3.1023-ChangesFrom 0.2.3.1b.rar)
Sharktooth
12th December 2005, 18:33
well... that was the purpouse of merging the changed sources and publish it on x264.nl ...
edit: besweet seems to be unstable with the new nero encoder...
puffpio
12th December 2005, 20:04
yeah i think megui + besweet + nero aac = broken
I am using nero 6 aac dll's
they worked before...
here is my log
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
Next job job1 is an audio job. besweet commandline:
"C:\Program Files\besweet\BeSweet.exe" -core( -input "C:\work\fc\Formula Continental0001.ac3" -output "C:\work\fc\Formula Continental0001.mp4" -logfile "C:\work\fc\Formula Continental0001.besweet.log" ) -azid( -s stereo -c normal -L -3db ) -bsn( -2ch -vbr_streaming -codecquality_high -aacprofile_he ) -ota( -g max )
successfully set up audio encoder and callbacks for job job1
----------------------------------------------------------------------------------------------------------
Log for job job1
besweet: "C:\Program Files\besweet\BeSweet.exe" -core( -input "C:\work\fc\Formula Continental0001.ac3" -output "C:\work\fc\Formula Continental0001.mp4" -logfile "C:\work\fc\Formula Continental0001.besweet.log" ) -azid( -s stereo -c normal -L -3db ) -bsn( -2ch -vbr_streaming -codecquality_high -aacprofile_he ) -ota( -g max )
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
and here is the besweet log
-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
BeSweet v1.5b31 by DSPguru.
--------------------------
Using azid.dll v1.9 (b922) by Midas (midas@egon.gyaloglo.hu).
Using Shibatch.dll v0.25 by Naoki Shibata & DSPguru (shibatch.sourceforge.net).
Using bsn.dll v0.24 by DPeshev,Richard,E-Male,DSPguru (DSPguru.Doom9.org).
Logging start : 12/12/05 , 11:03:49.
C:\Program Files\besweet\BeSweet.exe -core( -input C:\work\fc\Formula Continental0001.ac3 -output C:\work\fc\Formula Continental0001.mp4 -logfile C:\work\fc\Formula Continental0001.besweet.log ) -azid( -s stereo -c normal -L -3db ) -bsn( -2ch -vbr_streaming -codecquality_high -aacprofile_he ) -ota( -g max )
[00:00:00:000] +------- BeSweet -----
[00:00:00:000] | Input : C:\work\fc\Formula Continental0001.ac3
[00:00:00:000] | Output: C:\work\fc\Formula Continental0001.mp4
[00:00:00:000] | Floating-Point Process: No
vBulletin® v3.8.5, Copyright ©2000-2012, Jelsoft Enterprises Ltd.