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
berrinam
20th May 2006, 08:56
Some thoughts on bits of code that can still be improved:
Make the VideoEncoder and DGIndexer classes implement IJobProcessor, as all other job types already do. That will then mean more generic processing of jobs should be possible (I haven't looked into this too deeply).
Look into the management of dependencies. Since there are many dependencies at the moment, it would be nice to have a dynamic way of dealing with these, instead of having a static property for each exe file. This ties in with AutoUpdate, as I said above.
Extend polymorphism to video commandline generation, so that the VideoEncoderProvider provides the function that generates the commandline, instead of having many if statements
Sharktooth
20th May 2006, 14:20
CVS is down...
also MeGUI.exe doesnt get updated by the autoupdater...
are there any safely compiled versions of 0.2.3.2148? Sorry, its just that I need the fixes. :)
berrinam
21st May 2006, 00:10
CVS is down...It works for me now... maybe it's up again.
also MeGUI.exe doesnt get updated by the autoupdater...Yeah, I know. That's one of the fixes in 0.2.3.2148
are there any safely compiled versions of 0.2.3.2148? Sorry, its just that I need the fixes. :)
http://www.megui.org/megui-2148-mindist.zip
This is the smallest installation that works. Everything else can be installed from that via AutoUpdate.
Thanks man!
Also, for your version check thing, could just have MeGUI check the date in which the file was modified/created? then just set date restrictions/checkups and everything will be fine. Just an idea.
berrinam
21st May 2006, 01:18
Thanks man!
Also, for your version check thing, could just have MeGUI check the date in which the file was modified/created? then just set date restrictions/checkups and everything will be fine. Just an idea.
It's a thought, but IMHO that alone is not enough (it's how StaxRip does it, but I find that it gives a lot of 'unknown versions' there, just like MeGUI) because the date of creation could depend on a whole lot of things, and it would get all stuffed up anyway if someone else compiled it on a different day.
I think that the best system we can hope for is one that combines A manifest file which keeps track of versions (like we currently have)
Date checking, as you described
Being able to grab the versions from files (parsing the output, because CLI apps tend to print the version to stdout and stderr)
Testing of apps to see if they work, despite not knowing the versions
User overrides to set the version
Sharktooth
21st May 2006, 05:16
Being able to grab the versions from files (parsing the output, because CLI apps tend to print the version to stdout
x264 CLI outputs all the info to stderr.
i already did version checking for x264 but never commited it coz i was waiting for autoupdate.
i'll commit the changes as soon as i get that code integrated in the autoupdater.
stax76
21st May 2006, 08:09
It's a thought, but IMHO that alone is not enough (it's how StaxRip does it, but I find that it gives a lot of 'unknown versions' there, just like MeGUI) because the date of creation could depend on a whole lot of things, and it would get all stuffed up anyway if someone else compiled it on a different day.
StaxRip uses date only, it's of course possible to apply different methods depending on the application, the reason why I didn't do it is because I thought it's easier to use one solution that fits all. Using date will however be a mess unless you use a tolerance, I'm using 48 hours.
berrinam
21st May 2006, 08:22
Regexes work well for determining the version of an application, based on what it prints to stderr/stdout (I thought of them today, and then I read all about them, and I got a bit excited so I went through the MeGUI exe dependencies to see where they are applicable:D). I propose a system for easily checking the version based on stderr/stdout and regexes:
For a file, say x264, we currently have:
<x264 type="file">
<filepath version="r523">x264_r523.zip</filepath>
</x264>Now, we add another xml tag: regex, so that it now looks like this:
<x264 type="file">
<regex cmdline="--help">(?<=svn\-)[0-9]+</regex>
<filepath version="r523">x264_r523.zip</filepath>
</x264>
MeGUI would then see that tag, run the executable with the commandline --help (not that it needs it; it's just an example, because some apps DO need a special commandline to show the version, like mp4box), and use the regex: (?<=svn\-)[0-9]+
to return a string of the versions.
On the files I have, I have worked out the following regexes that work so far:
X264: (?<=svn\-)[0-9]+
MP4Box: (?<=version )[0-9.]+
DivXMux: (?<=DivXMux.exe version ).+(?=\r?\nUsage)
FAAC: (?<=FAAC )[0-9.]+(?= \()
LAME: (?<=version )[0-9.]+
mkvmerge: (?<=mkvmerge )v[0-9.]+(?= )
oggenc: (?<=OggEnc )v[0-9.]+(?= )
Note: I didn't test these regexes with C#, but I assume that the .NET implementation of regexes is complete.
This could also be extended to support a few things, like build date as well, as some things print that as well or instead.
EDIT: The following are the apps that MeGUI uses that only print the build date, and the required regexes for them:
ffmpeg build date: (?<=built on )([\w]+ ){2}([\w]+)(?= )
xvid_encraw build date: (?<= on )([\w]+ ){2}[\w]+
neroEncAac: (?<=build date: )(\w+ *){2}\w+
encaacpluscli: (?<=Build )(\w+ +){2}\w+(?=, )
The problem with these is that the formatting of the date varies, and I don't know what the best way to parse it is. It would be nice if there were some function which could parse a date string and automatically work out which field means what...[/EDIT]
Using regexes means that we get both the generic coding and the special cases.
foxyshadis
21st May 2006, 10:20
Well... there's a php-to-C# interface library, and php has strtotime, which reads just about any date formats into an unix timestamp... but that sounds excessively convoluted. Since it's all open source maybe you can just steal their parser and make a mini-library out of it. :p
Ah, but then, strtotime itself is based on the gnu date parsing/formatting library, which may well have a c# version/interface lying around.
berrinam
21st May 2006, 12:48
0.2.3.2149 21 May 2006
Commit by berrinam:
- Fixed the version parsing algorithm so that it isn't tricked by numbers like 1.10 being higher than 1.4
Doom9
21st May 2006, 13:03
strtotime itself is based on the gnu date parsing/formatting library, which may well have a c# version/interface lying around.C# obviously has such mechanisms, too.
@berrinam: I think you have to put those regexps into cdata elements as they invalidate the xml document structure. Specifically >< are not allowed as text elements because those are xml delimiter tags. I just ran into this problem at work last Friday, but wrapping them into CDATA will do the trick.
berrinam
21st May 2006, 13:09
I just ran into this problem at work last Friday, but wrapping them into CDATA will do the trick.I see you are right. I had to look up CDATA, though, to find out what you were talking about. ;)
Do you like the system, though?
Yama4050242
21st May 2006, 13:40
where does the auto update for avisynth plugins go? my avisynth plugin dir? I dont want anyone to touch there
MatMaul
21st May 2006, 14:20
Can you tell me please what is the equivalent of the option "Improve accuracy using 32 bits & Float computations" in audio configuration with an avisynth script ?
Carpo
21st May 2006, 14:24
from what i have seen it will only update the dlls, with the ones you can download from the megui guide sticky - no other files should be touched - i could be wrong tho :D
buzzqw
21st May 2006, 14:43
@MatMaul
the avisynth script for audio conversion will do a nice ConvertAudioTo32bit() or ConvertAudioToFloat() of audio samples before feeding audio encoder
This is mean for the maximum clean cristality when converting audio source to wav to encoder
BHH
MatMaul
21st May 2006, 14:47
@MatMaul
the avisynth script for audio conversion will do a nice ConvertAudioTo32bit() or ConvertAudioToFloat() of audio samples before feeding audio encoder
This is mean for the maximum clean cristality when converting audio source to wav to encoder
BHH
Thanks ! Just after the source and before the filters (like amplifydb) or after all the filters, just before the "return"?
And how megui chooses between ConvertAudioTo32bit() and ConvertAudioToFloat() ?
according to this code
if (audioJob.Settings.ImproveAccuracy || audioJob.Settings.AutoGain /* to fix the bug */)
script.AppendFormat("ConvertAudioToFloat(){0}", Environment.NewLine);
if (audioJob.Settings.AutoGain)
script.AppendFormat("Normalize(){0}", Environment.NewLine);
I think it's just after the source and ConvertAudioToFloat() is used
Yama4050242
21st May 2006, 15:09
from what i have seen it will only update the dlls, with the ones you can download from the megui guide sticky - no other files should be touched - i could be wrong tho :D
i dont want megui to update my dll, in that case i dont know what version i am using, i want it download the dll in the megui folder not my avisynth plugins
Carpo
21st May 2006, 15:31
you do have the option to tell megui not to download the dlls, and if you look it does tell u the date/version of the avisynth files.
you could always post this in the feature thread and see if the devs would add an option to change the path of the dlls,
Yama4050242
21st May 2006, 15:44
you do have the option to tell megui not to download the dlls, and if you look it does tell u the date/version of the avisynth files.
you could always post this in the feature thread and see if the devs would add an option to change the path of the dlls,
i have the option there but it can not uncheck all, to uncheck them one by one is crazy to me
edit: my bad, the had readmes
Yama4050242
21st May 2006, 15:48
i dont like the autoupdate anyhow, you can just give a web page that all the uptodate things on it, or maybe autoupdate for megui itself is quite enough, for eg. the dgdecode.dll and the dgindex, what if i create the d2v yesterday and i update the megui, then they become useless, and do we need to try all the betas when we got no problems with the latest "final"
Kurth
21st May 2006, 19:53
http://img364.imageshack.us/img364/237/mkvmux2wa.jpg
I need to mux a timecodes.txt with my video because I use VFR can you add this option to MeGUI MKV Mux ?
buzzqw
21st May 2006, 20:03
@Yama4050242
you can de-check what to download....
BHH
bob0r
21st May 2006, 22:45
@ megui devs:
Want me to put an unpacked version of x264.exe on my mirrors? For megui auto update... so maybe people can choose SVN or modified version via updater also, please let me know.
berrinam
21st May 2006, 23:05
GUYS, THIS IS NOT A FEATURE REQUEST THREAD OR A LETS-WHINE-ABOUT-EVERYTHING THREAD!
Please post in the relevant place (there is a Feature Request thread and a General Questions/Troubleshooting thread that you guys should be looking at)
where does the auto update for avisynth plugins go? my avisynth plugin dir? I dont want anyone to touch thereIt is really just annoying putting the AviSynth plugins in a different directory, because then every plugin used needs to be explicitly loaded. We've had this discussion many times, and there is no real reason to do things the hard way.
i have the option there but it can not uncheck all, to uncheck them one by one is crazy to me
Have you tried selecting more than one with Shift and right-clicking to see what you get? You can permanently turn off updates on any particular file by selecting 'Ignore updates', and you can turn them off temporarily by selecting Uncheck. I don't know what else you want.
Want me to put an unpacked version of x264.exe on my mirrors? For megui auto update... so maybe people can choose SVN or modified version via updater also, please let me know.Thank you for your offer. I would appreciate it, but we don't yet support multiple build series (it's certainly an aim, though).
bob0r
21st May 2006, 23:37
Thank you for your offer. I would appreciate it, but we don't yet support multiple build series (it's certainly an aim, though).
http://x264.nl/x264/x264.exe
http://mirror01.x264.nl/x264/x264.exe
http://mirror02.x264.nl/x264/x264.exe
http://mirror03.x264.nl/x264/x264.exe
http://mirror04.x264.nl/x264/x264.exe
http://mirror05.x264.nl/x264/x264.exe
Good luck (x264.exe is auto uploaded when a new revision is detected and compiled)
dimzon
21st May 2006, 23:56
http://forum.doom9.org/showpost.php?p=829754&postcount=259
MeGUI auto updater overwrites my NicAudio.dll (20060314) with some from 2005, in that case DRC not work
please, use my latest NicAudio binary from BeHappy workspace!
dimzon
21st May 2006, 23:59
0.2.3.2150 22 May 2006
Commit by dimzon:
- Fixed no more upgrade.xml from cache
dimzon
22nd May 2006, 00:10
talking about fileversion detection
there are special Win32 resource type named VERSIONINFO. So, I believe, the best/proper way will be to ask developers/builders to include VERSIONINFO resource into their win32 builds. It will cost approx 5 minutes to add such resource...
Sharktooth
22nd May 2006, 04:22
0.2.3.2151
Commit by Sharx1976:
- Better alignment of some controls
ChronoCross
22nd May 2006, 20:49
I am currently on vacation. I will have a megui folder final design when I get back.
berrinam
23rd May 2006, 08:01
talking about fileversion detection
there are special Win32 resource type named VERSIONINFO. So, I believe, the best/proper way will be to ask developers/builders to include VERSIONINFO resource into their win32 builds. It will cost approx 5 minutes to add such resource...
Can you provide some code to access this resource in C#?
Also, I'm doing a small refactor of the Encoder classes to make them all derive from IJobProcessor (this just means changing VideoEncoder and DGIndexer), and quite a few times I have come across this difficulty: we currently have some enums, like VideoCodec and AudioCodec. However, in various places it would be nice to have a type called Codec, which both derive from (for type-safety reasons). Is there any way to do this?
stax76
23rd May 2006, 08:39
There is a class called FileVersionInfo (http://msdn2.microsoft.com/en-us/library/system.diagnostics.fileversioninfo.aspx).
dimzon
23rd May 2006, 09:41
0.2.3.2152 22 May 2006
Commit by dimzon:
- Fixed OggVorbis 5.1 Channel mapping (http://forum.doom9.org/showthread.php?p=831098#post831098)
acrespo
23rd May 2006, 17:16
Since 2146 (until 2152) version is not function with autoencode for me. My steps:
1 - Load avs in video frame and change the name of video output.
2 - Press AutoEncode button, change the size to 174 Mbytes and check "Add additional content (audio, subs, chapters)".
3 - Select the audio already compressed in AAC format.
4 - Press Go button. Nothing happens. The "Adaptative Mux Window" window is still there and I don't see any entries in Queue tab.
Sharktooth
23rd May 2006, 18:14
Since 2146 (until 2152) version is not function with autoencode for me. My steps:
1 - Load avs in video frame and change the name of video output.
2 - Press AutoEncode button, change the size to 174 Mbytes and check "Add additional content (audio, subs, chapters)".
3 - Select the audio already compressed in AAC format.
4 - Press Go button. Nothing happens. The "Adaptative Mux Window" window is still there and I don't see any entries in Queue tab.
This is the DEVELOPMENT thread. Use the appropriate BUG REPORT thread...
However this problem is already known. Next time :search:
berrinam
24th May 2006, 01:10
0.2.3.2153 24 May 2006
Commit by berrinam:
- Small refactor to make all encoders implement IJobProcessor
- delete duplicate code thanks to the above refactor
- fix up two bugs with AutoEncode
Sharktooth
24th May 2006, 18:08
Maybe i found a suffuciently reliable way to do the compression test but that will require a lot of changes in avisynth script creator...
@devs: it's too long to discuss it here. please contact me via MSN or IRC (on freenode #x264)
berrinam
25th May 2006, 11:51
Also, I'm doing a small refactor of the Encoder classes to make them all derive from IJobProcessor (this just means changing VideoEncoder and DGIndexer), and quite a few times I have come across this difficulty: we currently have some enums, like VideoCodec and AudioCodec. However, in various places it would be nice to have a type called Codec, which both derive from (for type-safety reasons). Is there any way to do this?Help?
Doom9
25th May 2006, 12:41
I don't think you can inherit from an enum since it's not a class. Have you tried an interface which holds the enum(s) and exposes them in some useful way?
Sharktooth
26th May 2006, 03:04
0.2.3.2154 26 May 2006
Commit by Sharx1976:
- Added a "Quick & Dirty way (tm)" to prevent accidental shutdowns when aborting a job and the "Shutdown at end of encoding" checkbox is enabled (works only with the Abort button in the Queue tab)
- Some more controls alignment
It's quite late and i had no time to extend the shutdown prevention to the progress window. the megui settings and the shutdown checkbox on the main form cant be accessed directly from there... it requires some more code. feel free to complete it.
Sharktooth
26th May 2006, 03:46
0.2.3.2155
Commit by Sharx1976:
- Fixed a wrong slash ("/" to "\") in UpdateWindow.cs
berrinam
29th May 2006, 10:59
Maybe i found a suffuciently reliable way to do the compression test but that will require a lot of changes in avisynth script creator...
@devs: it's too long to discuss it here. please contact me via MSN or IRC (on freenode #x264)
Who are you on IRC?
Sharktooth
29th May 2006, 13:53
Same name as here but im not always online coz recently i've been quite busy.
Sharktooth
31st May 2006, 11:49
i had a discussion with berrinam about the megui development.
i dont actually remember all the things we discussed but i think we should freeze the actual status of megui and proceed with a bugfix before adding new stuff.
i think we should release a stable version (version 0.3) with the actual features so users can benefit from the auto-update and the refactored code.
Once we're done we could procede adding new stuff like the comp.check, the mirrors support in auto-update and other things.
M.H.A.Q.S.
31st May 2006, 12:44
As discussed in another thread. I am interested in the x264 GUI only part of MeGUI. Since its in C# so it serves my purpose and as old x264 only MeGUI source links are dead, I request any dev to provide me with a link to any archived source and build. I would be very much thankful.
berrinam
1st June 2006, 00:49
0.2.3.2157
Commit by berrinam:
- Fix bitrate calculation in AutoEncode and Calculator
0.2.3.2156
Commit by berrinam:
- Fix the mp4/aac bug with AutoEncoding.
- Partway to fix of bitrate calculations, but it is more complicated than it seems...
berrinam
1st June 2006, 02:13
0.2.3.2158
Commit by berrinam:
- Fix up DAR/SAR bug introduced in 0.2.3.2153
Sharktooth
1st June 2006, 02:40
0.2.3.2159
Commit by Sharx1976
- Moved shutdown prevention into Abort event. Shutdown now gets automatically disabled if the Abort event is triggered.
berrinam
1st June 2006, 03:04
0.2.3.2160
Commit by berrinam:
- Fixed bug of wrong raw filetype being assigned
bob0r
1st June 2006, 08:38
0.2.3.2157
Commit by berrinam:
- Fix bitrate calculation in AutoEncode and Calculator
0.2.3.2156
Commit by berrinam:
- Fix the mp4/aac bug with AutoEncoding.
- Partway to fix of bitrate calculations, but it is more complicated than it seems...
In Tools > Bitrate calculator, this is not refactored yet, correct?
Or should i file a bug report that the audio track(s) are not included in the results.
Doom9
1st June 2006, 18:49
@Sharktooth: About stable releases: you basically just said what I posted about two months ago as a roadmap. Right now we have reached the first milestone feature wise so it's time to fix remaining bugs, then it's time for another phase of adding features (cutlists for instance).
Sharktooth
1st June 2006, 19:04
yes, exactly.
forgive me but i have serious problems remembering some things...
Doom9
1st June 2006, 19:49
well.. I have a hard time remembering some megui code I wrote so don't sweat it ;)
berrinam
2nd June 2006, 13:36
0.2.3.2161
Commit by berrinam:
- Fix deletion of intermediate files in AutoEncode and OneClick encode modes
Sharktooth
3rd June 2006, 03:39
@devs: daverc kindly offered his help in developing a prototype wrapper class for mediainfo lib.
ill point him to this thread for discussing the details.
daverc
3rd June 2006, 14:08
I have done some little coding about the mediainfo.dll,
i think i will be able to get everyinfo that it can provide in a few days.
I have a working test assembly for specific fields
If anyone is interested i can send him the code.
berrinam
3rd June 2006, 14:57
@daverc: The fields I am interested in for MeGUI are:
Width/height
Aspect Ratio
FPS
Number of frames
Video Codec
Number of audio streamsUnfortunately I have no codebase for testing this on right now.
daverc
3rd June 2006, 15:29
@daverc: The fields I am interested in for MeGUI are:
Width/height
Aspect Ratio
FPS
Number of frames
Video Codec
Number of audio streamsUnfortunately I have no codebase for testing this on right now.
Consider it's done ;)
Tracks will be accessible as a tree of properties, and infos as inner nodes of properties.
structure of the call will be for instance,
import MediaInfoWrapper;
MediaInfo M = new MediaInfo(filepath);
string fps=M.Video(TrackNumber).FPS;
I'm on it now, so if you have any requests ...
Doom9
3rd June 2006, 18:05
wouldn't the audio properties be of use as well? As in "okay, this is an MP4 with an AAC audio track.. or an MP4 with an MP3 audio track.. or an MP4 with a Vorbis track (I know.. bad idea to do that).
daverc
3rd June 2006, 18:50
wouldn't the audio properties be of use as well? As in "okay, this is an MP4 with an AAC audio track.. or an MP4 with an MP3 audio track.. or an MP4 with a Vorbis track (I know.. bad idea to do that).
It's planned.
Video, audio, subtitles tracks and container info will have the same behavior (as in genuine mediainfo actually)
bob0r
4th June 2006, 12:17
@berrinam
http://forum.doom9.org/showthread.php?p=835115#post835115
Sorry for reasking, but a quick simple answer should be in place (Yes i know there is still that not refactored pop-up) but calculation is not fixed for anywhere i can see, so where do your changes apply to?
berrinam
4th June 2006, 13:59
The units are now correct in AutoEncode mode calculation. They should also be correct in the Bitrate Calculator. The problem with the audio tracks missing is a separate one that I looked at when you mentioned, but promptly forgot again. I will look at again sometime, but I'm somewhat busy at the moment, so I can't say for sure when.
berrinam
5th June 2006, 08:29
0.2.3.2162
Commit by berrinam:
- Fix audio-filesize-being-ignored bug in bitrate calculator
- Fix AR calculation to be ITU-correct
Stable release candidate. Bugs, anyone?
shon3i
5th June 2006, 12:24
0.2.3.2162
Commit by berrinam:
- Fix audio-filesize-being-ignored bug in bitrate calculator
- Fix AR calculation to be ITU-correct
Stable release candidate. Bugs, anyone?
Yea, Bitrate calculator dosen't work again because duration is 0:0:0 and audio bitrate can't be higher than 100kbps, and can you make for CTAAC and FAAC to only have MP4 container because is more flexible when muxing (SBR signaling switch is not possible in megui) and other things, aslo CT support --mp4box switch who automaticly make mp4 container instead aac but mp4box.exe must be in same dir.
dimzon
5th June 2006, 12:37
aslo CT support --mp4box switch who automaticly make mp4 container instead aac but mp4box.exe must be in same dir.
yeah, it's only one limitation
Sharktooth
5th June 2006, 13:37
0.2.3.2162
Commit by berrinam:
- Fix audio-filesize-being-ignored bug in bitrate calculator
- Fix AR calculation to be ITU-correct
Stable release candidate. Bugs, anyone?
yes... :(
changes in video profiles doesnt get always (?!?) saved.
when quitting megui and reloading the previously changed profile it still has the old settings.
shon3i
5th June 2006, 13:47
yeah, it's only one limitation
OK dimzon but i don't know why all tools not in tools folder instead one tool in one folder, or video encoders, audio encoders etc, and you can include another mp4box in enc_aacplus package because is not so frequent update.
berrinam
5th June 2006, 13:54
Ok, so the bitrate calculator is causing a lot of problems..... I can see why Doom9 didn't want to touch it. I haven't looked too deeply into the code, so I just tried to make a temporary fix. It seems that has disturbed a whole lot of other things. I think getting a robust version of the bitrate calculator probably requires a lot of code change in that class, so it's not a good idea to expect it soon.
Does someone else want to look at it, because I can't spend a lot of time coding right now?
shon3i
5th June 2006, 13:59
@dimzon here is the log of muxing process
Log for job job2
mkvmerge v1.7.0 ('What Do You Take Me For') built on Apr 28 2006 17:19:57
'Firewall.mkv': Using the Matroska demultiplexer.
'track 07.aac': Using the AAC demultiplexer.
'Firewall.mkv' track 1: Using the MPEG-4 part 10 (AVC) video output module.
Warning: AAC files may contain HE-AAC / AAC+ / SBR AAC audio. This can NOT be detected automatically. Therefore you have to specifiy '--aac-is-sbr 0' manually for this input file if the file actually contains SBR AAC. The file will be muxed in the WRONG way otherwise. Also read mkvmerge's documentation.
'track 07.aac' track 0: Using the AAC output module.
The file 'pera.mkv' has been opened for writing.
The cue entries (the index) are being written...
Muxing took 84 seconds.
so it's better to always use mp4 container for CT AAC
berrinam
5th June 2006, 14:31
so it's better to always use mp4 container for CT AAC
MeGUI already chooses MP4-AAC over RAW-AAC when there is a choice in MuxPathFinding. I think it is wrong and unreliable to (a) expect that mp4box is in WAAC's directory and (b) only allow mp4-aac output.
Also, I don't know if it is possible, but perhaps MediaInfoLib can detect whether an AAC file is SBR, in which case that problem goes away.
Doom9
5th June 2006, 14:35
There's another point to this: ctaac is the one aac encoder causing way more problems than any other. Since it's not any better than neroaac and costs the same, why do we even have it?
At some point, it's better to cut your losses.. your head starts to hurt if you try to break through the wall headfirst a couple of times and the wall just won't crack.
Just look at all the issues people are having with different ctaac versions and dlls, and the fact that we can't bundle them in autoupdate. It is very much reminiscent of the mess we had with neroaac prior to the commandline encoder. Actually, I tend to think it was a little less worse as things were stable with Nero, but are still changing with ctaac.
SeeMoreDigital
5th June 2006, 15:16
Hmmm!
My foot's in the other camp... I'm of the opinion that CT's encoder generates better sounding encodes than Nero's free encoder, especially when it comes to generating 6Ch AAC-HE streams!
Now when it comes to knowing whether or not an AAC stream is LC or HE, is not one of the biggest indicators the encodes "sample rate"?
EDIT: For example, if you are encoding from a 6Ch AC3 source with a sample rate of 48.0KHz, the 6Ch AAC-HE encode will have a sample rate of 24.0KHz. Like-wise, if you are encoding from a 2Ch CD-WAV source with a sample rate of 44.1KHz, the 2Ch AAC-HE encode will have a sample rate of 21.050KHz.
Cheers
shon3i
5th June 2006, 15:48
MeGUI already chooses MP4-AAC over RAW-AAC when there is a choice in MuxPathFinding. I think it is wrong and unreliable to (a) expect that mp4box is in WAAC's directory and (b) only allow mp4-aac output.
Also, I don't know if it is possible, but perhaps MediaInfoLib can detect whether an AAC file is SBR, in which case that problem goes away.
Ok, but dimzon makes enc_aacplus.exe to can produce mp4 files but only via mp4box and this work fine whitout any bug, so ct aac itself can't produce mp4 only raw aac and now no sense to use raw aac. if you use mp4 extension for aac that is wrong. If you can make somehow to detect sbr like you say, that will soloved the problem.
There's another point to this: ctaac is the one aac encoder causing way more problems than any other. Since it's not any better than neroaac and costs the same, why do we even have it?
At some point, it's better to cut your losses.. your head starts to hurt if you try to break through the wall headfirst a couple of times and the wall just won't crack.
Just look at all the issues people are having with different ctaac versions and dlls, and the fact that we can't bundle them in autoupdate. It is very much reminiscent of the mess we had with neroaac prior to the commandline encoder. Actually, I tend to think it was a little less worse as things were stable with Nero, but are still changing with ctaac. I agree with SMD, nero newer had good 6ch encoding aslo stereo is not so good, only where is better nero is maybe 48kbs, but i think aslo that licesing test on HA is not anymore correct because nero @ 48kbs now sounds whrose than on the test.
daverc
5th June 2006, 20:02
MediaInfo c# is ready.
Just put these files next to mediainfo.dll, and add a button in the gui.
Sources available on request.
daverc
5th June 2006, 22:19
Here is the code.
Original idea was found in staxrip.mediainfo.
Thank you Stax :)
Media tracks are List<TrackType>.
For instance, syntax to acces the codec of the first video track is
MediaInfo M=new MediaInfo(path);
string codec=M.Video[0].Codec;
You also get free track counter, and everything mediainfo can provide.
An empty string is returned when no information is available.
bob0r
6th June 2006, 11:21
0.2.3.2162
Commit by berrinam:
- Fix audio-filesize-being-ignored bug in bitrate calculator
- Fix AR calculation to be ITU-correct
Stable release candidate. Bugs, anyone?
Quick answer: No
The calculator is still very bugged. (You should test it a little)
In this case, fill in audio size, then change minutes then the audio resets to 0 (will file bug report if wanted)
In the the bitrate calculator is pretty important for custom encoding.
Long answer: No
Ill run by all visual and most logical functions very quick tonight. Too see if there are any unclean "bugs".
Then people should test some variations of default encodings and features(updates/bitrate calc/etc..)
berrinam
10th June 2006, 08:30
0.2.3.2163
Commit by berrinam:
- Another go at the bitrate calculator
It seems to be fine for me....
berrinam
10th June 2006, 08:58
0.2.3.2164
Commit by berrinam:
- Make the UpdateWindow fixed-size
- Add ConvertToYV12() to the autodeint scripts
Right.... again, any problems?
berrinam
10th June 2006, 09:21
Could a moderator approve daverc's second attachment please, or could dave post it somewhere else?
Doom9
10th June 2006, 12:01
I approved the attachment. Being able to approve inline really is a major bonus of the 3.5 vbb series :)
shon3i
10th June 2006, 12:25
0.2.3.2164
Commit by berrinam:
- Make the UpdateWindow fixed-size
- Add ConvertToYV12() to the autodeint scripts
Right.... again, any problems?
Again Bitrate Calculator but now have minor bugs.
1. MKV and MP4 must have same bitrate for same settings because when i using mkv bitrate i always get undersize, the differences is about 2 bits
2. Audio bitrate values are non-standard, can you make only standard values like 16,32,48,64,80,96,112,128,160,192,224,256,320,384, etc
3. when i try to change from MKV to MP4 container in bitrate calculator, bitrate won't change for this 2 bits
Doom9
10th June 2006, 13:48
While the bitrate should be somewhat different between MP4 and MKV there's one thing to be kept in mind: you cannot accurately calculate MKV overhead prior to encoding. The exact formulas are in the container forum in a post by mosu as reply to one of mine.. the overhead depends on the distribution of frame types.. and you just can't know how many I, P and B frames you're going to get prior to encoding. Every MKV bitrate calc on the planet relies on assumptions that can be more or less correct, but no calculator is ever exact.
shon3i
10th June 2006, 14:12
While the bitrate should be somewhat different between MP4 and MKV there's one thing to be kept in mind: you cannot accurately calculate MKV overhead prior to encoding. The exact formulas are in the container forum in a post by mosu as reply to one of mine.. the overhead depends on the distribution of frame types.. and you just can't know how many I, P and B frames you're going to get prior to encoding. Every MKV bitrate calc on the planet relies on assumptions that can be more or less correct, but no calculator is ever exact.
Yes but when i use MP4 bitrate (+2bits per second different from mkv bitrate) and mkv container i always get choosen size, with mp4 bitrate i never get over/undersize, and aslo GordianKnot bitrate calculator, calcualte same bitrate for mkv like megui for mp4. So then in megui something wrong abut mkv calculation because must be same like mp4.
berrinam
10th June 2006, 14:28
Yes but when i use MP4 bitrate (+2bits per second different from mkv bitrate) and mkv container i always get choosen size, with mp4 bitrate i never get over/undersize, and aslo GordianKnot bitrate calculator, calcualte same bitrate for mkv like megui for mp4. So then in megui something wrong abut mkv calculation because must be same like mp4.
Woah, it is really hard to understand what you are saying. Nevertheless, it seems to be a problem with the MKV overheads, which is a known problem. Suffice to say, I don't see it either as drastic enough or as easy enough to solve immediately, so unless some other dev will look into it, you will have to cope, unless you can give direct instructions on what to change.
2. Audio bitrate values are non-standard, can you make only standard values like 16,32,48,64,80,96,112,128,160,192,224,256,320,384, etcThis isn't a bug, and all you're asking for is multiples of 16, basically. It steps in multiples of 16, but gets adjusted by some other calculations, which can skew this because of rounding errors. This is not actually a bug (it's just an interface detail) so I'm going to ignore this for now. You can manually enter your own bitrate if you want.
shon3i
10th June 2006, 16:08
Woah, it is really hard to understand what you are saying. Nevertheless, it seems to be a problem with the MKV overheads, which is a known problem. Suffice to say, I don't see it either as drastic enough or as easy enough to solve immediately, so unless some other dev will look into it, you will have to cope, unless you can give direct instructions on what to change.
Sorry berrinam for my very poor english, MKV must have same bitrate like MP4 because have similar overhead which is not so different, but in resulting bitrate must be same value. FOr example in GK for MKV and x264 bitrate is 1087.98 rounded this is 1088 which is bitrate of MP4 (and it's correct bitrate for both MP4 and MKV), but in MeGUI for MKV i get bitrate 1086.
This isn't a bug, and all you're asking for is multiples of 16, basically. It steps in multiples of 16, but gets adjusted by some other calculations, which can skew this because of rounding errors. This is not actually a bug (it's just an interface detail) so I'm going to ignore this for now. You can manually enter your own bitrate if you want.Ok for that but try to type 128 and you get 127 in box, Why?
bob0r
10th June 2006, 16:38
0.2.3.2163
Commit by berrinam:
- Another go at the bitrate calculator
It seems to be fine for me....
Mostly it works fine, here are some final reports/questions:
MeGUI Bug-Report Thread - audio tracks (http://forum.doom9.org/showthread.php?p=838779#post838779)
berrinam
11th June 2006, 01:40
0.2.3.2165
Commit by berrinam:
- Enable audio track 2
- Fix the 15kbps bitrate increment to a 16kbps increment
I had a look at the actual calculation code, and it seems like some of it is wrong (according to www.alexander-noe.com, anyway), but it isn't a fatal error, so I think that can wait, considering that it needs some more work and testing.
@Doom9: What did you use to write the calculation code? www.alexander-noe.com has stuff about AVI and MKV, and it is mostly the same as what you have, but some of what you did now seems outdated (eg the MKV frame-size issues are no problem with MKV v2, apparently -- all frames now have 7 bytes overhead).
Doom9
11th June 2006, 02:29
I used the information mosu gave me in this thread: http://forum.doom9.org/showthread.php?t=96703&page=2&highlight=overhead
Page 2 and 3 contain the relevant details. I was never quite happy with the existing code and asked if somebody had a better idea.. if you have one, feel free to adapt the calculations.. they're really suboptimal.
berrinam
11th June 2006, 02:34
What about for AVI?
Doom9
11th June 2006, 03:10
The AVI frame overhead is well known (24 bytes per frame). As far as audio overhead goes, I tested various sources in GKnot and knowing the video frame overhead I broke down the audio muxing overhead to a number per video frame. Basically the results should always match GKnot and from my personal experience, GKnot is very accurate when it comes to AVIs.
berrinam
11th June 2006, 03:22
The AVI frame overhead is well known (24 bytes per frame). As far as audio overhead goes, I tested various sources in GKnot and knowing the video frame overhead I broke down the audio muxing overhead to a number per video frame. Basically the results should always match GKnot and from my personal experience, GKnot is very accurate when it comes to AVIs.
I see. Reading through Alex Noe's website, however, gives quite a different explanation, especially regarding VBR-MP3 overhead, which is many times higher. I suppose testing is the only way to find out for sure what is right.
Doom9
11th June 2006, 04:08
one thing to keep in mind... alex basically refers to avimuxgui.. we're using mkvmerge and divxmux respectively.. avimuxgui has options the tools we have do not have.
berrinam
11th June 2006, 05:14
True.... I am keeping that in mind, and have checked that, say, mkvmerge does indeed support SimpleBlocks.
Doom9
11th June 2006, 17:18
one little thing: those codec configuration windows are non resizeable dialogs.. they shouldn't have an active maximize button as the result is buttugly ;)
berrinam
12th June 2006, 02:40
0.2.3.2166
Commit by berrinam:
- Fix the behavior of some dialogs
Sharktooth
13th June 2006, 23:26
0.2.3.2167
Commit by berrinam:
- Fix some profile bugs
berrinam
16th June 2006, 08:39
0.2.3.2168
Commit by berrinam:
- Fix XviD+CQ
- Hide some XviD options that don't work with xvid_encraw
berrinam
16th June 2006, 23:03
0.2.3.2169
Commit by berrinam:
- Fix Adaptive Mux Window 'Go' button bug
- Fix 1st-pass bug
You might have been folllowing the XviD presets thread, and the thing which is restricting Teegedeck at the moment is that it isn't possible to do a separate configuration of the first pass codec settings. What do you think about making this possible?
What I have in mind is adding a checkbox and two radio buttons to the base VideoConfigDialog. The checkbox would be, 'configure first pass separately', and the radio boxes would be 'configure first pass now' and 'configure non-first passes now'. Internally, the checkbox's value would be stored as a bool, and if it is true, then there would be another field inside which is a copy of the codec settings, which is a custom configuration of the first pass:
class VideoCodecSettings
{
bool customFirstPass;
VideoCodecSettings firstPassSettings;
}
It's a bit hackish, so I'm reluctant to do it immediately, so what do you think? Do you have any other ideas?
Sharktooth
17th June 2006, 04:21
i wouldnt touch that code (the first rule in programming is "dont fix it if aint broke").
we're going toward a stable version so such changes should be in the next versions.
berrinam
17th June 2006, 05:39
Yes, certainly. Only bugfixes should be in the current versions, I was just thinking about the future (the good thing about CVS is that you can work on multiple things at once).
berrinam
17th June 2006, 06:35
@Sharktooth: Have you tried the SVN migration again? Is a nightly tarball actually necessary, because these are apparently deprecated, so waiting for them may mean we never migrate. Could you make me an admin in MeGUI, so I can have a look round that stuff as well please?
berrinam
18th June 2006, 23:47
0.2.3.2170
Commit by berrinam:
- Catch DirectShow exceptions
- Force Source Detection to only display results _after_ it has finished
berrinam
19th June 2006, 07:13
Should we divide the MeGUI source into folders? I think we are getting too many files in the one folder -- too disorganised.
ChronoCross
19th June 2006, 08:13
if you can come up with a decent folder structure.....I've seen some projects where the folder says NOTHING about the content. That sucks big time.
berrinam
19th June 2006, 08:43
As I see it, the source code in MeGUI can be divided into the folowing, functionality-wise:
Core -- the classes that are essential to MeGUI
\
\
-Queue -- manages the queue
-Profiles -- manages the profiles
-Plugin-manager -- although we don't actually support runtime plugins, we're heading towards that
-Interfaces (for plugins) -- VideoReader, IJobProcessor, ISettingsProvider, possibly also a IJobCreator (see later)
-Job creation -- manages the plugins, etc to create jobs
Core-GUI -- the bits of the GUI that are essential to MeGUI
\
\
-The main form
-Settings form
-Updater
Utils -- Dunno how useful this is
\
\
-VideoUtil.cs, basically, but without the job creation tools
Packages: if we get a very dynamic structure, most of the tools will end up being here
\
\
-Codecs, implementing ISettingsProvider, for both Audio and Video, which includes also their CodecSettings and SettingsForms
-Job creators (AutoEncode, One-Click, D2V, etc), implementing IJobCreator
-Job processors, implementing IJobProcessor
That makes it a pretty extensible mechanism, if possible. Then, we could group the files into folders by the top-level groupings I outlined.
IJobCreator: Basically, the AutoEncodeWindow and the One Click Encoder are both just interfaces to the same encoding backend, and there is no real reason to integrate them strongly into MeGUI. So instead, we could make them implement IJobCreator, so extra tools like them can be dynamically added to the Tools menu.
Doom9
19th June 2006, 11:28
I wanted to bring up another thing for quite a while now: Should the preview window be subclassed for the various purposes? I bring this up because after the next stable release there's going to be one more mode of operation: cutting.
Also, what do you think about the workflow when it comes to cutting? I feel right now it's already pretty complex with where you set your start/end credits and where you set your zones... cutting will make it even more complex. Any suggestions for that?
berrinam
19th June 2006, 11:44
We need a way to store info about the videos that we are dealing with. This info will mean zones, cuts and compressibility check info. I'm against the idea of having 'project files' because I like the idea that you can simply load a file in MeGUI and encode it immediately without having to mess around with projects. I think what could work is saving cut-files (and compressibility-check files and possibly zones-files) in the same directory as the input AVS file, but with a different extension. Then, MeGUI could auto-detect these when loading the AVS file, and load the cuts/etc as well. This is clear to the user, because it would show 'using cutpoints from ___ file'
As to the workflow, cutting comes in the AviSynth stage, because that's what it is -- editting the video (as opposed to credits/zones, which are editing the encode). This avoids confusion between cutting and zones/credits. Adding a 'cut-file' field in the audio encoding section would also allow for integration with audio cutting.
We could also introduce a reference in the AviSynth file to the location of the cut-file, so that when deleting intermediate files, we can delete the cut-file as well as the avisynth file.
Sharktooth
19th June 2006, 14:04
@Sharktooth: Have you tried the SVN migration again? Is a nightly tarball actually necessary, because these are apparently deprecated, so waiting for them may mean we never migrate. Could you make me an admin in MeGUI, so I can have a look round that stuff as well please?
Automatic SVN migration just fails and as you said nightly tarballs are gone...
The migration can be done with rsync but i havent time to read the "how to..." etc.
however it seems i cant update your status to admin (maybe doom9 can though).
We need a way to store info about the videos that we are dealing with. This info will mean zones, cuts and compressibility check info. I'm against the idea of having 'project files' because I like the idea that you can simply load a file in MeGUI and encode it immediately without having to mess around with projects. I think what could work is saving cut-files (and compressibility-check files and possibly zones-files) in the same directory as the input AVS file, but with a different extension. Then, MeGUI could auto-detect these when loading the AVS file, and load the cuts/etc as well. This is clear to the user, because it would show 'using cutpoints from ___ file'
As to the workflow, cutting comes in the AviSynth stage, because that's what it is -- editting the video (as opposed to credits/zones, which are editing the encode). This avoids confusion between cutting and zones/credits. Adding a 'cut-file' field in the audio encoding section would also allow for integration with audio cutting.
We could also introduce a reference in the AviSynth file to the location of the cut-file, so that when deleting intermediate files, we can delete the cut-file as well as the avisynth file.
I like it :)
@all: sorry but nero aac encoder had to go from the auto-update until we manage to work this license thing around...
berrinam
19th June 2006, 14:34
0.2.3.2171
Commit by berrinam:
- Fix a bug which caused some mux paths not to be found
Doom9
19th June 2006, 14:38
Shouldn't the Cutlist directly go into the script when it's being generated? After all it's the script that will be used for the encoding configuration (credits, zones) and if it's not directly applied, setting zones will be a heck of a mess (you have to recalculate every start and end frame with respect to the cuts).
berrinam
19th June 2006, 22:10
I meant that, but we also need to be able to remember what the cuts were so that identical ones can be done for audio.
Doom9
19th June 2006, 23:00
Of course.. shouldn't we keep cuts in memory as well though so as not to have to write and re-open files all the time?
berrinam
19th June 2006, 23:10
Yes.... not that it makes much difference:
1. write the avisynthscript+ cuts-file
2. Open your audio files
3. Read the cuts file to encode the audio.
It's only one extra read....
Sharktooth
20th June 2006, 02:04
we can store cuts in the avisynth script as MeGUI macros too...
berrinam
20th June 2006, 07:44
0.2.3.2172
Commit by berrinam:
- Fix 'Queue analysis pass'
berrinam
20th June 2006, 08:53
I declare 0.2.3.2172 a stable version, because it's had many bugfixes and I now have some new features prepared which I am going to commit. Hopefully, someone can put this version up on SF, so it is 'official'. I don't know if we want a numbering change, so I'm going to continue with the current numbers, and someone else can suggest a new system if they want.
Autoupdate will continue to be updated to the latest versions of MeGUI, so if people want to stay on a stable build, they should set core updates to be ignored. A better system for dealing with this will come eventually.
berrinam
20th June 2006, 09:15
Back to development builds now:
0.2.3.2173
Commit by berrinam:
- Add support for MediaInfo
berrinam
20th June 2006, 09:31
Any comments on my post about folders and plugins (http://forum.doom9.org/showthread.php?p=842136#post842136)?
Sharktooth
20th June 2006, 15:00
Uhm.... 2172 should be put on SF. However there are still bugs to fix :(
I think i can work a bit on MeGUI on this weekend.
About folders, yes a reorganization is strongly needed.
Sharktooth
20th June 2006, 16:34
0.2.3.2174
Commit by Sharx1976:
- Fixed MediaInfoWrapper.dll resource dependancy in the project file
- Added a confirmation MessageBox when clearing the queue
- Changed a menu item title to "Avisynth Script Generator" to keep consistency with the form title
0.2.3.2175
Commit by Sharx1976:
- Restored the menu item title to "Avisynth Script Creator" and changed the title of the form instead
berrinam
21st June 2006, 13:42
If I have this for video:
interface IVideoReader
{
Bitmap readBitmap(int frame);
}
then what should I have for audio?
dimzon
21st June 2006, 13:47
If I have this for video:
interface IVideoReader
{
Bitmap readBitmap(int frame);
}
then what should I have for audio?
// fast method, returns how much bytes are readen
long ReadAudioSamples(long nStart, int nAmount, IntPtr buf)
// slow method
byte[] ReadAudioSamples(long nStart, int nAmount)
berrinam
21st June 2006, 13:48
Thanks
dimzon
21st June 2006, 13:51
Thanks
talking about fast/slow implementation I propose
// write RGB data directly into memory buffer
int ReadVideoFrames(long nFirstFrameNumber, int nFramesCount, IntPtr buf)
berrinam
21st June 2006, 13:55
(We might as well do it for completeness, but) Why does MeGUI need fast video reading?
berrinam
21st June 2006, 13:59
// fast method, returns how much bytes are readen
long ReadAudioSamples(long nStart, int nAmount, IntPtr buf)
// slow method
byte[] ReadAudioSamples(long nStart, int nAmount)
How is this supposed to behave with non-byte-sized samples?
dimzon
21st June 2006, 14:04
(We might as well do it for completeness, but) Why does MeGUI need fast video reading?
Current implementation via readBitmap is really slow - it creates/destroys multiple GDI objects when You use PREVIEW ability...
How is this supposed to behave with non-byte-sized samples?
16 bit Stereo = 2*2 = 4 bytes ;)
berrinam
21st June 2006, 14:12
Ok, I'll write the prototypes as you described and you can write the implementations ;)
berrinam
21st June 2006, 14:27
I see this code at the moment for VideoReader:
public abstract class IVideoReader : IDisposable
{
public abstract void Close();
public abstract Bitmap ReadFrameBitmap(int framenumber);
#region IDisposable Members
void IDisposable.Dispose()
{
Close();
}
#endregion
}
and in d2vReader:
public override void Close()
{
closeD2V();
GC.SuppressFinalize(this);
}
Why do we need to call GC.SuppressFinalize(this); in d2vReader, and is it necessary to implement IDisposing directly in the base VideoReader interface? Shouldn't that be implemented by an abstract class which also implements IDisposing?
dimzon
21st June 2006, 14:55
Why do we need to call GC.SuppressFinalize(this) in d2vReader
To avoid unnececary Finalizer call to speedup garbage collector a lot
Actually (according MSDN (http://msdn2.microsoft.com/en-us/library/system.idisposable.aspx) guide) if your class contains unmanaged resources itself you must
implement finalizer, cleanUp all umnamaged resources in it
implement IDisposable.Dispose(), cleanUp all unmanaged resources in it, call IDisposable.Dispose to all disposable members, disable futher finalization via GC.SuppressFinalize(this)
using System;
using System.ComponentModel;
// The following example demonstrates how to create
// a resource class that implements the IDisposable interface
// and the IDisposable.Dispose method.
public class DisposeExample
{
// A base class that implements IDisposable.
// By implementing IDisposable, you are announcing that
// instances of this type allocate scarce resources.
public class MyResource: IDisposable
{
// Pointer to an external unmanaged resource.
private IntPtr handle;
// Other managed resource this class uses.
private Component component = new Component();
// Track whether Dispose has been called.
private bool disposed = false;
// The class constructor.
public MyResource(IntPtr handle)
{
this.handle = handle;
}
// Implement IDisposable.
// Do not make this method virtual.
// A derived class should not be able to override this method.
public void Dispose()
{
Dispose(true);
// This object will be cleaned up by the Dispose method.
// Therefore, you should call GC.SupressFinalize to
// take this object off the finalization queue
// and prevent finalization code for this object
// from executing a second time.
GC.SuppressFinalize(this);
}
// Dispose(bool disposing) executes in two distinct scenarios.
// If disposing equals true, the method has been called directly
// or indirectly by a user's code. Managed and unmanaged resources
// can be disposed.
// If disposing equals false, the method has been called by the
// runtime from inside the finalizer and you should not reference
// other objects. Only unmanaged resources can be disposed.
private void Dispose(bool disposing)
{
// Check to see if Dispose has already been called.
if(!this.disposed)
{
// If disposing equals true, dispose all managed
// and unmanaged resources.
if(disposing)
{
// Dispose managed resources.
component.Dispose();
}
// Call the appropriate methods to clean up
// unmanaged resources here.
// If disposing is false,
// only the following code is executed.
CloseHandle(handle);
handle = IntPtr.Zero;
// Note disposing has been done.
disposed = true;
}
}
// Use interop to call the method necessary
// to clean up the unmanaged resource.
[System.Runtime.InteropServices.DllImport("Kernel32")]
private extern static Boolean CloseHandle(IntPtr handle);
// Use C# destructor syntax for finalization code.
// This destructor will run only if the Dispose method
// does not get called.
// It gives your base class the opportunity to finalize.
// Do not provide destructors in types derived from this class.
~MyResource()
{
// Do not re-create Dispose clean-up code here.
// Calling Dispose(false) is optimal in terms of
// readability and maintainability.
Dispose(false);
}
}
public static void Main()
{
// Insert code here to create
// and use the MyResource object.
}
}
is it necessary to implement IDisposing directly in the base VideoReader interface?
I just like to write something like
using(IVideoReader vr = new BlaBlaBlaReader(...))
{
// bla bla bla
}
in this case IVideoReader MUST implement IDisposable
berrinam
21st June 2006, 23:03
I just like to write something like
using(IVideoReader vr = new BlaBlaBlaReader(...))
{
// bla bla bla
}
in this case IVideoReader MUST implement IDisposable
But IVideoReader should simply inherit IDisposable, NOT have an implementation of it:
THIS IS WRONG:
public abstract class IVideoReader : IDisposable
{
public abstract void Close();
public abstract Bitmap ReadFrameBitmap(int framenumber);
#region IDisposable Members
void IDisposable.Dispose()
{
Close();
}
THIS IS RIGHT:
public interface IVideoReader : IDisposable
{
void IDisposable.Dispose();
Bitmap ReadFrameBitmap(int framenumber);
}
Do you agree?
berrinam
22nd June 2006, 08:25
Uhm.... 2172 should be put on SF. However there are still bugs to fix :(I think we've stopped development for long enough to remove most of the bugs. While there certainly are bugs (like the safe profile alteration one) MeGUI is still nowhere near a complete release (the updater really needs some work to become a proper solution), so continued development on real features, not bugs, is IMHO important.
berrinam
22nd June 2006, 12:40
0.2.3.2176
Commit by berrinam:
- Add '-threads' option to xvid config
- Fix 'safe profile alteration' feature. Does anyone actually need this?
berrinam
23rd June 2006, 09:25
0.2.3.2177
Commit by berrinam:
- Fix profiles not being saved when closing bug
I know I said earlier it's better to be safe than sorry regarding the CVS->SVN conversion and history, but I really would like some more advanced stuff like SVN and trac, so I'm interested in that. I'm no longer convinced we actually need the history. What does everyone else think?
PS. Who would host trac if we moved to that?
dimzon
23rd June 2006, 13:07
I'm no longer convinced we actually need the history. What does everyone else think?
No, please, keep history
buzzqw
23rd June 2006, 13:13
noooo please !!! i love to read changelog !
BHH
berrinam
23rd June 2006, 13:22
noooo please !!! i love to read changelog !
BHH
History, as in CVS history, not the changelog. What I mean is that the CVS history IMHO needn't all be transferred to SVN.
@dimzon: Why do you think we should keep the CVS history?
Doom9
23rd June 2006, 13:24
The history Berrinam is speaking of is the CVS history.. the changelog (4th tab) will remain. Either way, I have many many old versions still archived. You can check out every revision so that when needed, a diff between two revisions can always be made. But rare are the ocurrences when you actually have to go back to something that was. The only time I ever needed to go back I ended up using a hard copy and manually merging files to get back to an usable state.
Sharktooth
23rd June 2006, 13:47
@berrinam: i managed to upgrade your status to admin, so now you have the possibility to have a look at subversion migration.
However if automatic cvs->svn fails there are very few chances we can keep history since cvs tarball are deprecated.
Sharktooth
23rd June 2006, 14:30
megui SVN has been resynched (without history though).
Doom9
23rd June 2006, 15:56
about catching stdout/stderr: recently I adopted a slightly different strategy at reading stdout/stderr output from a process. When you activate events, there's an event that's triggered whenever something is written to a redirected output.. I'm wondering whether that might rid us of the annoying "megui doesn't get the error message that x264 shows before crapping out" thing (where people consistently forget to think just a little bit before posting the log and realize that a second pass that only lasts for a few seconds obviously is no real second pass)
daverc
23rd June 2006, 17:15
about catching stdout/stderr: recently I adopted a slightly different strategy at reading stdout/stderr output from a process. When you activate events, there's an event that's triggered whenever something is written to a redirected output.. I'm wondering whether that might rid us of the annoying "megui doesn't get the error message that x264 shows before crapping out" thing (where people consistently forget to think just a little bit before posting the log and realize that a second pass that only lasts for a few seconds obviously is no real second pass)
I used this approach for xAnime, it works well but it is not perfect either. Some exe don't like it. I don't remember why but for for X264.exe i had to use a helper class called ProcessCaller, which was actually my 1st choice. However for mp4box and mkvmerge watching stderr/stdout with events was working well. If you ever want to see what i mean, you can find the sources here (http://detritus.sobanet.com/files/xanime/xAnime.0.1.5.full.7z).
The classes for command line processing are CLIEncoder for management with events, and inherited X264CLIencoder with overriden methods using ProcessCaller helper. I also use some kind of notifier to report progress of CLI outputs.
Sirber
23rd June 2006, 17:34
I used this approach for xAnime, it works well but it is not perfect either. Some exe don't like it. I don't remember why but for for X264.exe i had to use a helper class called ProcessCaller, which was actually my 1st choice. However for mp4box and mkvmerge watching stderr/stdout with events was working well. If you ever want to see what i mean, you can find the sources here (http://detritus.sobanet.com/files/xanime/xAnime.0.1.5.full.7z).
The classes for command line processing are CLIEncoder for management with events, and inherited X264CLIencoder with overriden methods using ProcessCaller helper. I also use some kind of notifier to report progress of CLI outputs.That's why I gave up on .NET. Not programmer friendly.
Doom9
23rd June 2006, 18:08
Hmm.. basically your Processcaller seems to be doing something very similar than my reader.. I also have two threads reading the outputs and firing events when something is being received. I even added something on top of that which keeps those reading threads running up until there's really nothing left in both readers anymore. I have no idea how x264 manages to bypass my code.
daverc
23rd June 2006, 23:30
That's why I gave up on .NET. Not programmer friendly.
Right, and that's exactly on these lines of code where you left.
And where i started.
I spent countless hours to do useless experiments to figure out a working solution.
Doom9, I'm pretty sure you already tried this one. . If not, It seems to be .Net 2 standard approach. Notice that the trigger to report completion of the process is somehow hidden : EnableRaisingEvent. This time there's only one thread. Its main flaw is issues to deal with the order of the events when stderr and stdout outputs simultaneously. At least this time you can be sure not to stop reading before every message has been processed.
One more thing you can do is read the exitcode of the process.
Let's hope x264.exe return something far from -1 on error.
Last workaround to losing error notification can be to store every output string. Ie for debug purpose, store up to 128 kb, for regular use, store only last 10 lines.
Process calcProc;
List <string> stdout=new List <string> ;
List <string> stderr=new List <string> ;
private void AsyncExec(string CmdLine, string CmdParams)
{
calcProc = new Process();
ProcessStartInfo i = new ProcessStartInfo();
// Start info
i.FileName = CmdLine;
i.Arguments = CmdParams;
i.RedirectStandardOutput = true; // makes MP4Box fail
i.RedirectStandardError = true; // makes x264 fail
i.CreateNoWindow = true;
i.UseShellExecute = false;
calcProc.StartInfo = i;
//Redirects the output of the console
calcProc.OutputDataReceived += new DataReceivedEventHandler(calcProc_OutputDataReceived);
calcProc.ErrorDataReceived += new DataReceivedEventHandler(calcProc_ErrorDataReceived);
// in case event is not catched by any eventhandler
//new MethodInvoker(this.calcProc_OutputDataReceived).BeginInvoke(null, null);
//new MethodInvoker(this.calcProc_ErrorDataReceived).BeginInvoke(null, null);
//Enables the redirection of the event fired at completion of the process
calcProc.EnableRaisingEvents = true;
calcProc.Exited += new EventHandler(calcProc_Exited);
// Start
calcProc.Start();
//Starts the redirection of the output
calcProc.BeginOutputReadLine();
calcProc.BeginErrorReadLine();
}
//On end of the process write the time and launch next step
void calcProc_Exited(object sender, EventArgs e)
{if (calcProc.ExitCode!=-1) DoSomeThingWithExitCode(calcProc.ExitCode);
DoSomeThingOnCompletion();
}
//for X264 the progress is displayed on std error
void calcProc_ErrorDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{stderr.Add(e.data);
DoSomeThingToReportStdErr(e.data);
}
void calcProc_OutputDataReceived(object sender, System.Diagnostics.DataReceivedEventArgs e)
{stdout.Add(e.data);
DoSomeThingToReportStdOut(e.data);
}
daverc
24th June 2006, 02:24
Btw, processCaller is borowed from CodeProject (http://www.codeproject.com/csharp/LaunchProcess.asp)
As you noticed, it uses threads to handle the readings.
It has been written in 2003, and is obviously .net 1.1.
I just added a kill method, maybe it would need an exitcode as well. I tried to get rid of it with above code, but i had no success with x264.exe.
However MeGui already has everything required to deal with command lines.
bob0r
24th June 2006, 02:45
megui SVN has been resynched (without history though).
Will megui updates be in the sf SVN now?
(auto update script is ready to roll!)
berrinam
24th June 2006, 02:48
Yes, they should.
Doom9
25th June 2006, 11:36
@daverc: I'm actually not losing any notification. Yours as well as mine is based on reading line after line from stdout/stderr (so not using the actual events that are being fired.. we use that just for the exit event and have some postprocessing after that). My two readers actually have little more code.. I use an mre so that when I get the exit event, I read whatever's yet unread from those two readers (encraw is like that.. if you misconfigure it, you get the exit even before all the output has been read.. I think it's a weird timing issue since after all encraw has to write output before it exits).. that does the trick for encraw but no good has come from it from x264. One of the problems I'm having is that I can't even reproduce it.. people post the log but don't post what happens when they run the commandline manually. If I had a scenario that I could reproduce, at least I could try a different approach and know if it helps or hurts before committing anything.
daverc
25th June 2006, 16:55
That was everything i could suggest about that area of the code. Sorry it did not help.
What about writting every output line to a log file ? On a temp basis, and on a testing build which you will give only to people having the issue.
It 's a simple way to collect enough data, and only need injection of 2 lines of code next to the readers methods.
Doom9
25th June 2006, 17:52
I don't think it's so much a problem of not processing the line as it is of not getting it at all.. with encraw I pulled all registers to make sure I'm reading everything.
daverc
25th June 2006, 18:15
And what about searching a way to use this exitcode ?
protected void proc_Exited(object sender, EventArgs e)
{
mre.Set(); // Make sure nothing is waiting for pause to stop
stdoutDone.WaitOne(); // wait for stdout to finish processing
stderrDone.WaitOne(); // wait for stderr to finish processing
if (proc.ExitCode != 0) // check the exitcode because x264.exe sometimes exits with error but without
su.HasError = true; // any commandline indication as to why
job.End = DateTime.Now;
su.IsComplete = true;
doExitConfig();
su.Log = log.ToString();
statusUpdate(su);
}
Doom9
25th June 2006, 19:02
you got a list of all errorcodes ready?
there's no rule as to what a program should use as exit code
daverc
25th June 2006, 19:14
Nope.
But i can give a look at x264 source to see if these error codes actually means something.
Sorry it is not a lead to follow.
x264 returns -1 if it fails on opening source
fprintf( stderr, "x264_encoder_open failed\n" );
or setting output file,
fprintf( stderr, "can't set outfile param\n" );
else it return 0.
Only message you can try to parse if it not already processed is
fprintf( stderr, "aborted at input frame %d\n", opt->i_seek + i_frame );
daverc
25th June 2006, 20:09
Even this last message is normal operation and seems to be called only when user presses CTRL+C, and that obviously never happens in MeGUI. That 's why i have not any found it in MeGUI code.
So completly forget the idea of using the exit code.
Anyway, if have a few ideas to test, but i'm not yet familiar with x264. If you are not working on it now, plz hold your work a little and i may be able to provide you more informations about the cases where x264 has abnormal termination.
Doom9
25th June 2006, 20:38
I'm kinda waiting for the one user that brought up the problem recently to tell me how I can reproduce it.. then I can take it from there. I haven't written a single line of code for megui since March.
daverc
25th June 2006, 21:48
Let me know when he will show up, and i might give a hand.
I have found the location and the mechanics of the logger in x264 code. Once i have figured a scheme, we will be able to parse everything we can read in a dos command line.
I will wait for the bug report before starting working on it, because i really don't know if it will be of any use.
Sharktooth
26th June 2006, 14:08
I promised berrinam i would have worked on megui the past weekend but it seems im cursed since my HDD crashed (damn maxtor!) but luckily i had a 3 days old backup so i recovered almost everything...
shon3i
27th June 2006, 00:27
(damn maxtor!) Oh, yea!!
daverc
29th June 2006, 00:15
I found a possible issue in avisynth script creator with filenames. Avisynth can't open some sources when avs file is coded in UTF8. Replace the stream writter by the blue line.
Encoding.Default is ANSI.
Line 1095 in avisynthwindow.cs
private void writeScript(string path)
{
try
{
////AVS scripts should be written in ANSI
////default stream writter encoding is UTF8
//StreamWriter sw = new StreamWriter(path);
//sw.Write(avisynthScript.Text);
//sw.Close();
File.WriteAllText(path, avisynthScript.Text, Encoding.Default);
}
catch (IOException i)
{
MessageBox.Show("An error ocurred
when trying to save the AviSynth script:\r\n" + i.Message);
}
}
hkl8324
29th June 2006, 13:20
Megui Bugs?
I encode a video using Megui (disk space 200MB:p ).
The encoded file is 120MB...
When Megui proceed to the muxing stage
, it produce a 0KB mp4 file in the end. (120+120>200MB)
and worse of all, Megui deleted my encode video and audio files...
Sharktooth
29th June 2006, 13:27
:search:
also this is the development thread and not the bug-report thread.
berrinam
3rd July 2006, 11:44
I'm working on a refactor which I spoke about earlier, which involves making most parts of the program be made up of interfaces and thus make all the separate components independent as possible. Anyway, I don't know how to make an interface for a Job-generator. At the moment, JobUtil generates all the Jobs for MeGUI, and everything is just a GUI for that. All of the jobs are trivial to create except for video job creation (since it can create multi-pass jobs). So, how do I make a polymorphic job generation interface, which can create jobs of an arbitrary type without building too much code inter-dependance?
The best I can think of is:
interface JobCreator
{
Job CreateJob(params object[] jobInfo);
}
Which is really just hopeless, as it (a) relies on the caller knowing exactly what the callee expects (which removes the abstraction that the interfaces are supposed to allow) and (b) removes any type-safety. Any suggestions? Perhaps independence is too much to hope for in this situation (this is required only so that the One Click Encoder and the AutoEncoder can generate video and audio jobs).
daverc
3rd July 2006, 15:56
So, how do I make a polymorphic job generation interface, which can create jobs of an arbitrary type without building too much code inter-dependance?
I don't know.
Here are my thought about it.
1 case :
I suppose you want to implement JobCreator in One Click Encoder and Auto Encoder.
Did you consider using the approach we use when we add a control to a control container, let's say a form. Ie a list of controls for the parent with an add method ?
This way the JobCreator will be more a "JobHost", and creator will be the constructor of each job.
interface JobCreator
{
Jobs List<Jobs>;
Add(Job J);
}
interface Job
{ ...
JobCreator Host;
}
2 case :
You want to implement it in AudioJobCreator, VideoJobCreator, etc ...
make the interface with a CreateJob method taking only few parameters, like the job name.
Then add several methods in AudioJobCreator, VideoJobCreator, etc ...
interface JobCreator
{
Job CreateJob(string name, JobType jobtype);
}
VideoJobCreator : JobCreator
{
Job CreateJob(string name, JobType jobtype);
{...}
Job CreateJob(some more params);
{...}
Job CreateJob(some even more params);
{...}
}
berrinam
3rd July 2006, 23:46
Did you consider using the approach we use when we add a control to a control container, let's say a form. Ie a list of controls for the parent with an add method ?
This way the JobCreator will be more a "JobHost", and creator will be the constructor of each job.
interface JobCreator
{
Jobs List<Jobs>;
Add(Job J);
}
interface Job
{ ...
JobCreator Host;
}
That's what I'm doing right now. It mostly works, but there's one situation where it falls down:
interface ITool
{
Run(MainForm info);
}
VideoTool : ITool
{
Run(...)
{
// Does some magic, and calls MainForm.AddJob() with a few new video jobs
...
}
}
OneClickEncoder : ITool
{
Run(...)
{
// This needs to generate a video job. Should it duplicate VideoTool's code (obviously not), or should it find some way to call it (yes, but how, without losing the abstraction?)? For instance, if we unregister the VideoTool, should we still be able to create video jobs via the OneClickEncoder?
}
}
AutoEncoder : ITool
{
Run(...)
{
// This needs to share a lot of code with the OneClickEncoder. So there are the same problems as above with how to do this well.
}
}
interface JobCreator
{
Job CreateJob(string name, JobType jobtype);
}
VideoJobCreator : JobCreator
{
Job CreateJob(string name, JobType jobtype);
{...}
Job CreateJob(some more params);
{...}
Job CreateJob(some even more params);
{...}
}
The whole point about the interface is that the parameters passed in the method defined by the interface are all that are required for the implementation. If we need to case-wise subclass the interface to work out what needs to be passed, we lose all the abstraction/extensibility/code-cleanliness.
My conclusion from trying to work it out: it isn't possible to maintain the abstraction of interfaces while asking for a very specific thing (ie video job generation). So, the OneClick- and Auto-Encoders will have to know the specific methods which generate the video jobs, as they do right now, anyway. It's a small loss in abstraction, but it's needed for interdependence, and I think we can assume that video encoding will always be in the core part of MeGUI. I don't know what happens in the future if more advanced interdependence is needed, but that's not my problem now....
daverc
4th July 2006, 00:28
Just more thoughts.
adding a struct somewhere to store job types will help when you pass a job as parameter.
struct JobType
{
string audio;
string video;
string mux;
string null;
}
What about using an abstract class instead of an interface ?
What about inheriting from multiple atomics interfaces ?
My advice is to play with class diagram generator before getting into the code.
berrinam
4th July 2006, 02:28
Just more thoughts.
adding a struct somewhere to store job types will help when you pass a job as parameter.
struct JobType
{
string audio;
string video;
string mux;
string null;
}
I don't get the point of this, and it also seems to mean that job types will be limited to audio, video, and mux, whereas I have made that part extensible already.
What about using an abstract class instead of an interface ?How does this help?
What about inheriting from multiple atomics interfaces ?Can you show me what you mean please? I don't understand.
My advice is to play with class diagram generator before getting into the code.The code has already all been written (because MeGUI already works;)), which is a good thing, because I know what constraints I have and what to expect. I'm now trying to fit it into an interface system.
What I think I will do is leave audio and video encoding components as core parts of MeGUI, so anything can simply access JobUtil's methods for the common bits in the code.
daverc
4th July 2006, 03:43
These were just simple ideas i had when trying to figure out what was your goal.
1.Forget the JobType.
2.An abstract class would be :
- a place to hold the common code of OneClickEncoder and AutoEncoder.
- something that must be inherited and can't be used itself, just like every interface.
3.Inheriting multiple smaller interfaces may help if a single interface is not "generic enough"
What I think I will do is leave audio and video encoding components as core parts of MeGUI, so anything can simply access JobUtil's methods for the common bits in the code.
My conclusion from trying to work it out: it isn't possible to maintain the abstraction of interfaces while asking for a very specific thing (ie video job generation). So, the OneClick- and Auto-Encoders will have to know the specific methods which generate the video jobs, as they do right now, anyway. It's a small loss in abstraction, but it's needed for interdependence, and I think we can assume that video encoding will always be in the core part of MeGUI. I don't know what happens in the future if more advanced interdependence is needed, but that's not my problem now....
One day, you will end with a MeEngine and a MeGUI. :)
You may consider splitting them in separate namespaces now.
These are just simple thoughts ...
berrinam
4th July 2006, 06:12
One day, you will end with a MeEngine and a MeGUI. :)I've actually really thought about that idea.... MeGUI is very much becoming very generic/abstract and clever/powerful, so designing an AviSynth-like scripting language could be (IMHO) a really interesting idea. I thought about AviSynth's incredible succes, and I think the easy scripting language is one of the main reasons. It also frees up the work even more for developers, so different components can be worked on independantly, and since GUI would be separated from implementation, we could even look to a different (cross-platform) language, like Java or D. But that's another day's discussion....
You may consider splitting them in separate namespaces now.Already done! :D
foxyshadis
8th July 2006, 05:19
Is SVN official yet or is CVS still current? hm, I see they're both at the same revision so I'll use svn.
Xvid bugfixes based on incorrect or missing default values: (I know framedrop isn't exposed yet, but I threw it in anyway)
Index: CommandLineGenerator.cs
===================================================================
--- CommandLineGenerator.cs (revision 7)
+++ CommandLineGenerator.cs (working copy)
@@ -507,7 +507,7 @@
sb.Append("-packed ");
if (xs.MotionSearchPrecision != 6)
sb.Append("-quality " + xs.MotionSearchPrecision + " ");
- if (xs.VHQMode != 0)
+ if (xs.VHQMode != 1)
sb.Append("-vhqmode " + xs.VHQMode + " ");
if (xs.QPel)
sb.Append("-qpel ");
@@ -536,10 +536,10 @@
if (!xs.Trellis)
sb.Append("-notrellis ");
if (!xs.ChromaMotion)
- sb.Append(" -nochromame ");
+ sb.Append("-nochromame ");
if (xs.MinQuantizer != 2)
sb.Append("-imin " + xs.MinQuantizer + " ");
- if (xs.MaxQuantizer != 2)
+ if (xs.MaxQuantizer != 31)
sb.Append("-imax " + xs.MaxQuantizer + " ");
if (xs.MinPQuant != 2)
sb.Append("-pmin " + xs.MinPQuant + " ");
@@ -547,7 +547,9 @@
sb.Append("-pmax " + xs.MaxPQuant + " ");
if (!xs.ClosedGOP)
sb.Append("-noclosed_gop ");
- if (xs.NbBframes > 0)
+ if (xs.FrameDropRatio != 0)
+ sb.Append("-drop " + xs.FrameDropRatio + " ");
+ if (xs.NbBframes != 2)
{
sb.Append("-max_bframes " + xs.NbBframes + " ");
if (xs.VHQForBframes)
@@ -558,7 +560,7 @@
sb.Append("-bquant_offset " + xs.BQuantOffset + " ");
if (xs.MinBQuant != 2)
sb.Append("-bmin " + xs.MinBQuant + " ");
- if (xs.MaxBQuant != 2)
+ if (xs.MaxBQuant != 31)
sb.Append("-bmax " + xs.MaxBQuant + " ");
}
if (parX > 0 && parY > 0) // custom PAR mode
berrinam
8th July 2006, 06:19
Is SVN official yet or is CVS still current? hm, I see they're both at the same revision so I'll use svn.Correct. Your patch is now in SVN.
0.2.3.2178
Commit by berrinam:
- Add foxyshadis's XviD fixes
bob0r
8th July 2006, 18:37
Not sure if it was fixed, or if this is because of SVN, but the changelog tab is showing the changes correctly on my windows xp again.
Anyways good work on the svn!! :D
foxyshadis
10th July 2006, 11:04
Oops, forgot to fully test the patch, so here's a fix, without the silly mistake in the other. (Note: Don't code while asleep.)
Index: CommandLineGenerator.cs
===================================================================
--- CommandLineGenerator.cs (revision 8)
+++ CommandLineGenerator.cs (working copy)
@@ -549,9 +549,9 @@
sb.Append("-noclosed_gop ");
if (xs.FrameDropRatio != 0)
sb.Append("-drop " + xs.FrameDropRatio + " ");
+ if (xs.NbBframes != 2)
+ sb.Append("-max_bframes " + xs.NbBframes + " ");
if (xs.NbBframes > 0)
{
- sb.Append("-max_bframes " + xs.NbBframes + " ");
if (xs.VHQForBframes)
sb.Append("-bvhq ");
if (xs.BQuantRatio != 150)
Sharktooth
11th July 2006, 03:53
0.2.3.2179
Commit by Sharx1976:
- Foxyshadis quote: "Don't code while asleep"
Dayvon
12th July 2006, 20:16
Haven't dropped by in while, thought I'd just check in and weigh in with my 2cents.
You guys are flipping amazing.
Just got the newest MeGUI and between the autoupdate, the improved previews (DAR), the superiority of your AVISynth creator; you guys have THE BEST encoder/GUI I have ever used.
I just recently acquired Final Cut Studio for work and with it came Apple's Compressor program. MeGUI puts it to shame. Compressor is slow to encode, doesn't have near the customizability, lower quality overall, etc. etc.
So just to encourage you all (x264, AVIsynth devs as well), you have the best personal/semi-pro video encoding on the planet, and others are now playing catchup. Congrats and thanks!!!
Sharktooth
14th July 2006, 02:00
I'll commit a CommandLineGenerator.cs patch as soon as the SVN auth will work again...
In the meanwhile here are the bins: http://mirror05.x264.nl/Sharktooth/MeGUI/MeGUI-0.2.3.2180.7z
Sharktooth
16th July 2006, 03:36
@devs: Are you having problems with SVN or it's me? It seems i cant commit... auth failure.
squid_80
16th July 2006, 05:19
Maybe something to do with this?
( 2006-07-13 09:23:52 - Project CVS Service, Project Shell Service, Project Subversion (SVN) Service, SourceForge.net Web Site ) A recent kernel exploit was released that allowed a non admin user to escalate privileges on the host pr-shell1. We urge all users who frequent this host to change their password immediately and check their project group space for any tampering. As a precaution, we have blocked access to all project resources by password until the user resets their password. After the password has been reset, project resources should be accessible within 5 minutes.
Sharktooth
18th July 2006, 03:54
weird... i didnt get that notification in my mailbox...
0.2.3.2180
Commit by Sharx1976:
- Fixed x264 command line generation ("--analise " --> "--analyse none" when all macroblock disabled and adaptive dct enabled)
squid_80
18th July 2006, 05:00
I found it on the Site Status (http://sourceforge.net/docs/A04/) page, the first place I look when something on sourceforge won't work. (I look at it often...)
Sharktooth
31st July 2006, 03:45
Got some working code for the FTP support in the autoupdater but i need a working lib that handles FTP full PASV mode or users behind firewalls, misconfigured routers, NAT, proxies and other "port-blocking" softwares (most of internet users) will not be able to get updates.
Any ideas?
Sharktooth
31st July 2006, 14:27
0.2.3.2181
Commit by Sharx1976:
- Made x264 thread-input enabled by default
foxyshadis
31st July 2006, 15:47
New patch against 2181 (http://foxyshadis.slightlydark.com/random/megui-2181-xvidcustom.diff):
Mostly cosmetics on the xvid panel, plus enabling custom commandline.
Now for proposals:
* I'd like to put quantizer type selection with the custom matrix box. It would say "Quantizer Matrix" and would start with a drop-down of h263,mpeg,custom just like the current, but if you choose custom the box for loading a matrix shows up to the right. Disabling won't work as a visual because it's disabled already and no one can tell when three dots on the load button are enabled or disabled. Or we could just enable it when custom is selected, and possibly just prevent typing. Eh.
* I have the same issue with x264's. At least if it said "Load" instead of "..." it'd be visible. Hmm.
* I'd like to add an escape key and perhaps enter key handler, as well as rearranging the other key-bindings that interfere with standard windows keys. At the least, replacing ctrl-c,v, & x with alt-c,v, & x or similar. Also reenabling ctrl-a support.
* And I'd like to change the way the zone tab works. I'd like to make it so that when you click on an entry, the numbers will be loaded back in for you to edit, "add" becomes "update" (instead of needing a separate button). If a zone intersects over overwrites another zone, it will just be quietly removed or fixed up instead of giving an error, or ask first. Plus a bit of rearrangement.
I can whip up a prototype later if you'd like to see what all I have in mind, and exactly how I'd like it to peform in different cases.
Since I'm not versed in advanced C# like you guys, I figure I can at least help with the usability/cosmetics, starting with the parts that annoy me and then looking at the rest of the buglist. :p
foxyshadis
1st August 2006, 01:03
New patch against 2181 (http://foxyshadis.slightlydark.com/random/megui-2181-xvidpackedfix.diff):
Packed bistream fix, unrelated to above patch.
Doom9
1st August 2006, 11:01
* I'd like to add an escape key and perhaps enter key handler, as well as rearranging the other key-bindings that interfere with standard windows keys. At the least, replacing ctrl-c,v, & x with alt-c,v, & x or similar. Also reenabling ctrl-a support.What's wrong with the X button to close a dialog? That's universal.. escape isn't as apps tend to do different things when you press escape.
And what about enter? I can't begin to tell how I hate apps that do something when I press enter when I expected a linewrap instead. If you put enter as OK (as an example) in a codec config, then you suddenly can't force a value in a up/down element anymore (first you type, then you press enter so the value is taken into account without you having to enter another control).
As far as the shortcuts go.. do you have a good alternative (and while you're at it, can make them actually show up? Everything is written so that the menu should have underlined keys.. but they just don't show up).. since they don't show up it's so much more important that they are apparent when you look at the menu.. it can't be cryptic when you can't see what kind of shortcuts are available.
I'd like to make it so that when you click on an entry, the numbers will be loaded back in for you to edit, "add" becomes "update" (instead of needing a separate button).But you still need those two buttons.. how else are you going to add a new zone? Via update? That would be extremely confusing.
check
1st August 2006, 11:41
I'm with you on the enter button - it should be used for line breaks only - but the shortcuts in MeGUI are seriously messed up. Many times I've gone to copy something only to have the calculator pop up. Althouth the Chapter Creator only has 'C' initials, cut copy pasta have been using ctrl-x/c/v for too long to lightly mess with.
Also, while we're on the subject, where is ctrl-w for closing windows? I use this command all the time for most programs, but it's suspiciously absent in MeGUI.
foxyshadis
1st August 2006, 11:59
I dislike not having esc because I hate switching from keyboard to mouse, hate hunting for the x unless I'm near it already, and it's the standard cancel button for dialogs. Enter I don't care much about, it's mainly standard usage in messageboxes which this definitely isn't, I shouldn't have mentioned it.
Label hints already show up, but if "Show extra keyboard help in programs" in windows accessibility options is unchecked, you have to press Alt first.
As for zones, my idea was to make the button switch between add and update labels, but that's potentially confusing and realistically doesn't cover all expected possibilities; having to click off the list or on a pre-made "New Zone" line vs just hitting the add button. Add can overlap the functionality of update, with or without a confirmation box, but update doesn't really overlap add. So it will less new than I thought, mostly loading a zone's options in when clicked on, overwriting existing zone bounds, and synching update's bounds checking and behavior to add's. (Right now it seems to have none.)
Check, all standard windows accellerators are hooked by megui and disabled atm. =\
Doom9
1st August 2006, 13:18
You can close apps and windows with Alt-F4.. that's the universal shortcut, notd escape and not something with W (I've never even heard of that).
it's mainly standard usage in messageboxesI don't know what kind of programs you've used but if I could, I'd have given a couple software writers a good beating for making the Enter button do something in an app, especially if it does something irreversible. No way will I allow megui to ever become such an app where I have to fear for my life when meeting one of the users of my app.
And I find it suspcious that people can just complain but not make any productive suggestions with regards to the shortcuts.. if you have no productive input, it's often better not to say anything at all.
Sharktooth
1st August 2006, 13:45
0.2.3.2182
Commit by Sharx1976:
- Cosmetics on the xvid panel, plus enabling custom commandline.
- Packed bistream fix.
(both patches by foxyshadis)
Sharktooth
1st August 2006, 14:00
0.2.3.2183
Commit by Sharx1976:
- Fix: Unchecking lossless in x264 configuration now re-enables the bitrate/quantizer textbox
foxyshadis
1st August 2006, 14:11
And I find it suspcious that people can just complain but not make any productive suggestions with regards to the shortcuts.. if you have no productive input, it's often better not to say anything at all.
If you're asking for suggestions, the current assignments are not unreasonable, using alt instead of ctrl. Additions include:
Alt-b: Bitrate calc.
Alt-o: Open video file.
Alt-e: One click
Alt-u: Update.
Alt-m: Pop up tools->muxer menu. (Or a dialog to the same effect so it doesn't go poof when the mouse waves over it?)
Alt-n: Minimize. (Why alt-n? Because alt-shift-n has been minimize since windows 1.0.)
Alt-p: Import profiles
Alternates:
Alt-v: Open video.
Alt-a: Open audio.
And do the validation when you hit "Enqueue".
Alt-i: Import profiles
Alt-p: Export profiles (But I really think importing is more closely associated with the general concept of profiles... oh well.)
And we start hitting letter pressure at that point; if you want to have Enqueue be an accellerator you can steal e and give r to one click encoder. Ctrl can be mixed in if desired, but all alt is nice for consistency until you run out. (Alt-shift-v and alt-shift-a respectively for enqueue? ctrl-shift-v/a for config? Now this is getting silly.) Either way, free up View's mnemonic and give that menu another name (or, howabout dumping view and minimize altogether and using the old-fashioned left-corner "shift" menu, placing process info in tools).
You might notice I also reordered the tab stops (that is the most amazing VS2005 feature I've never heard of, you have to try it) in xvid and intend to do so for the other panels, to make tabbing through a little easier. Part of making life easier for keyboardists.
Sharktooth
1st August 2006, 15:08
new option in x264: --threads=auto to detect number of cpus
but we already have our cpu # detection code and we set the x264 and other codecs threads (where applicable) accordingly.
should we let x264 choose the # of threads or keep the current behaviour?
Sharktooth
1st August 2006, 16:04
0.2.3.2184
Commit by Sharx1976:
- Fixed xvid custom commandline options in CommandlineGenerator.cs
Sharktooth
1st August 2006, 16:38
0.2.3.2185
Commit by Sharx1976:
- Several cosmetic fixes
check
2nd August 2006, 04:56
Ok, I'll also put my money where my mouth is ;) - here are some suggestions. I also think it would be worth reordering the tools menu to something more in line with the expected workflow. As an addendum to my previous comments about keeping default windows shortcuts as they are - I enjoy having other custom shortcuts to take arbitrary shortcut letters that are simply easy to reach with one hand - so I can keep one hand on the mouse.
I prefer alt for new windows & similar and ctrl for same window commands.
o Open: ctrl-o. Having separate extensions for audio/video doesn't seem to smart, would there be some way to use one command to also ask for "open as"?
o Close window / quit (with confirmation): ctrl-w alt-x.
o d2v creator: alt-1 alt-d
o Avisynth Creator: alt-2 alt-a
o Bitrate Calc: alt-3 alt-b
o One click encoder: alt-4 alt-r
o Chapter Creator: alt-5 alt-c
o Muxers: alt-6 alt-e alt-m
o AVC Matrix Editor: alt-9
o AVC level - move to a button, either inside x264 config or in the video input config which only shows up when x264 is selected. If you want to keep it in the menu, shortcut: alt-0
o Profile management. Possibly have a large 'profile centre' sort of thing where you can access, import and delete all profile types. If so, the one click setup would get integrated here too. No shortcut.
o One click setup: No shortcut.
o Settings: alt-, .This is the mac shortcut - there's no equivalent for windows but I always expect it - even if it's rare I get to use it ;)
o Update: No shortcut.
Will add more as I remember what i'm missing.
Doom9
2nd August 2006, 10:46
Why alt-n? Because alt-shift-n has been minimize since windows 1.0.hmm... I've never heard of that so I tried on this w2k box I'm currently on.. Alt-N does nothing, Alt-Shift-N does nothing, Alt-Ctrl-N does nothing, only Ctrl-N does something (in Firefox and IE it opens a new windows, in windows explorer it doesn't do anything).
should we let x264 choose the # of threads or keep the current behaviour?is that new option in any way better than what we currently use? The disadvantages are: it's probably hardware controlled so even if you boot up with /onecpu, an asm based cpu detection would probably still report two cores, and we have other codecs that don't have an autodetection so the current code is still required.
As far as profiles go.. export: megui saves all profiles upon exit so that is redundant. Import: copying profiles to the proper place equals import so once again I think this is redundant.
foxyshadis
2nd August 2006, 12:20
Did I say alt-shift? I meant alt-space followed by n. Anyway, a real minimize icon on the upper right is still more useful and standard than any shortcut.
Firefox and other Mozilla apps do not respond to those standard windows shortcuts. However, most win32 software with an icon in the upper left corner will. (ie, explorer.)
alt-space+m is still a handy trick when you have a primary monitor screw up and you need to call up display options and get it to the second montior blindly in a hurry. >.>
Anyway, back on topic: Check, it is possible to subclass the standard open dialog to put a video/audio radio button on it. Hmm. Not sure if it'd be worth it in this case, but an interesting thought. Adding filetype detection would be better, but avisynth can be both.
Does anyone really use profile libraries in zip files? They're nice and useful in theory, but Teegedeck is the only one I know who's made use of them.
berrinam
2nd August 2006, 12:48
The profile import is also used in Sharktooth's AVC profiles, and they integrate nicely with auto updates, since they install without any fuss. I implemented them so that people don't have to muck around with the files that MeGUI should really control, and they also manage extra dependencies, like one click relying on other profiles, and CQM files.
JoaCHIP
2nd August 2006, 13:50
I just tried MeGUI 0.2.3.2185 and here's my comments on this tool in general (both big and small issues mixed):
Good things:
Easy to use
Uses 2 cpus
Has "low" priority as default
Auto creation of .avs file
Seems to be quite stable
Supports many formats
Bad things:
"Increase Volume automatically" must not be enabled by default!! It doesn't even say if this is a limiter, a normalizer or a compressor. :scared:
The reversed Action / "Cancel" button order in all dialogs is annoying to a non mac user. Cancel should always be the right-most choice. The confusement comes from right-aligning the buttons in the window. Center or left-align them, and it all becomes clear.
The "Automatic Encidong" dialog is "always on top" even tho i didn't ask for that.
MeGUI should display all files or at least all media files in the filerequester, not just .avs files.
The "Automatic encoding" dialog should remember the last settings to be more convenient.
CruNcher
2nd August 2006, 17:31
Gpac and Matroska output for X264 cli seem to be borked @ the moment i advise everyone to use raw only forever :P (to much problems allways with the container updateing) X264 should skip both imho
Sharktooth
2nd August 2006, 17:59
i didnt update the gpac libs in my builds. so if it was working before it should be still working right now.
kurt
2nd August 2006, 18:07
jep, mp4 & mkv output works fine here with recent builds both of megui and x264 (r546)...
elguaxo
2nd August 2006, 18:39
MeGUI 0.2.3.2181 + x264 r541 + MKV working here.
CruNcher
2nd August 2006, 18:55
urgh then it's some cmd line parseing bug or something new jeez
ok but if anyone ever has problems encoding with the cli (doesn't encode but creates container) just try raw output it will work then
dunno yet whats the problem (but it can't be old)
x264.exe --bitrate 7721 --output "seven-bug.mp4" "seven.avs" <- fails
x264.exe --bitrate 7721 --output "seven-bug.mkv" "seven.avs" <- works
x264.exe --bitrate 7721 --output "seven-bug.264" "seven.avs" <- works
but with some combos that worked before also .mkv can fail .264 allways works
Sharktooth
4th August 2006, 16:18
@cruncher: In rev 551 i reverted to an older GPAC.
please test if it now works.
Doom9
4th August 2006, 20:55
"Increase Volume automatically" must not be enabled by default!! It doesn't even say if this is a limiter, a normalizer or a compressor. I have people storming my house if that were removed.. it's a good default if I ever saw one. If you care to know what it does, it's open source and you posted in the dev thread so we expect that you know how to read the source ;) The same goes for your other comments.. if you have any feature requests or bugs, there's specific threads for that. I especially don't appreciate the use of "xyz shoud do abc"... that's your opinion.. is not "how it should be".. and the "remember settings in the autoencode window" has been requested many times so it'll probably be implemented at some point in the future.
@foxyshadis: alt<space> works.. it's probably an easy thing to add so how about a patch?
The ALT + x solution nicely sails around the use of standard shortcuts (I do agree that it's annoying that they don't work), on the other hand, Control is the standard accelerator to directly trigger an action, while alt is used to jump to a certain menu.
And what is import/export profile?
foxyshadis
5th August 2006, 15:17
Ok, I'll also put my money where my mouth is ;) - here are some suggestions. I also think it would be worth reordering the tools menu to something more in line with the expected workflow. As an addendum to my previous comments about keeping default windows shortcuts as they are - I enjoy having other custom shortcuts to take arbitrary shortcut letters that are simply easy to reach with one hand - so I can keep one hand on the mouse.
I prefer alt for new windows & similar and ctrl for same window commands.
o Open: ctrl-o. Having separate extensions for audio/video doesn't seem to smart, would there be some way to use one command to also ask for "open as"?
o Close window / quit (with confirmation): ctrl-w alt-x.
o d2v creator: alt-1 alt-d
o Avisynth Creator: alt-2 alt-a
o Bitrate Calc: alt-3 alt-b
o One click encoder: alt-4 alt-r
o Chapter Creator: alt-5 alt-c
o Muxers: alt-6 alt-e alt-m
o AVC Matrix Editor: alt-9
o AVC level - move to a button, either inside x264 config or in the video input config which only shows up when x264 is selected. If you want to keep it in the menu, shortcut: alt-0
o Profile management. Possibly have a large 'profile centre' sort of thing where you can access, import and delete all profile types. If so, the one click setup would get integrated here too. No shortcut.
o One click setup: No shortcut.
o Settings: alt-, .This is the mac shortcut - there's no equivalent for windows but I always expect it - even if it's rare I get to use it ;)
o Update: No shortcut.
Will add more as I remember what i'm missing.
Anyway, I finally had a chance to get my hands dirty on it, and C# is rather more restrictive than win32, but as I read up on it, in a way that's a good thing - a lot of international keyboards use some of the combos we were considering for regular letters, even if it's annoying. (No alt+letters, and no symbols with anything.) You can override the accel key handler but why. But the alt-# idea is a great one, wish I'd thought of that.
What's funny is that I went ahead and split the tools menu into two menus, then came back to reread your post, and found out I was too late. =p
So here's my plan:
&File->
* &Open (ctrl-o)
* &Import Profiles (ctrl-i)
* &Export Profiles (ctrl-e)
* E&xit (alt-f4)
&Encoding->
* &One Click Encoder (alt-1)
* &D2V Creator (alt-2)
* &Avisynth Script Creator (alt-3)
* &Bitrate Calculator (alt-4)
* &Chapter Creator (alt-5)
* &Muxers ->
* * Adaptive Mu&xer (alt-6)
* * M&KV Muxer
* * &MP4 Muxer
* * &AVC2AVI
* * &Divx AVI Muxer
* &Validate AVC Level (move to x264 later)
* AVC &Quant Matrix Editor (also move to x264)
&Tools ->
* &Settings
* &One Click Setup
* &Update (ctrl-u?)
* &Minimize to Tray
* Show &Progress
Shortcut display will also be enabled. This way mnemonics and accelerators can be decoupled.
I like the whole profile manager plan. It doesn't need to be large, but it should import, export, and update profiles. It could be built out of the existing profile importer.
Another grand idea: Fold the processing window into a tab in the main form so it doesn't take up extra toolbar space. (Either hidden when not processing or not.) The main window's titlebar can show the % completion. This is actually a little better for when there's taskbar pressure and stuff gets grouped, when you have to click the group to see the %.
I checked out moving Level Validation, but it'll require a little surgery so I left it to do. Quant editor was much easier, though it needs to be more integrated.
I also need to update zones anyway, so that xvid can have its chroma optimizer, carton mode, and such options. Probably as checkboxes that'll be hidden by default.
Here's the patch (http://foxyshadis.slightlydark.com/random/megui-2185-uistuff.diff) - it's not meant for svn, just testing and comments.
Concerning audio, it'd be great to have a compressor/limiter, but we can't do that until someone comes up with one. ^^;
check
6th August 2006, 09:07
No alt-letter? :<
I spent some time thinking about your accelerator layout and coming up with feedback/problems only to discover you had already factored them all in; as far as the accelerators go I think they are fine :D . There are only a few changes I'd suggest for thought (I'm not sure if I would prefer them myself) that I'll list below.
After all this I went out for lunch and couldn't stop thinking about the workflow layout, and the UI of megui in general (I'm glad I was eating alone ;)). I've got a few ideas for a (major/show stopping) revamp of the megui interface, but I'll hold back posting about them until I work out a mockup and get some more info so they are a bit more than the frivolous words doom9 loves so much :-P.
Now, back to the accelerators, divx AVI muxer would seem to be better written into the menu as '&AVI Muxer' and the avc2avi frontend as '&h264 Muxer' which means both can use the first letter of their title, making learning the shortuts for a relatively obscure section of menu a whole lot easier.
Since we have plenty of alt-#s free it would be nice to allocate the h264 matrix editor alt-0 (although since that's a semi special shortcut it could be saved for something else?). Also, if the profile centre will ever become a reality we should work out where it fits into the numbers now and reserve the shortcut for it to avoid future confusion and yet more shortcut refactoring.
Finally, if you can do it, pleasepleaseplease set prefs to open with 'alt-,'. Although it's a rare key combo on windows the likelihood of it ever being a problem is low and I'm sure a lot of closet / previous mac owners will thank you :-P. alt-. is often used for view options on macs too (see itunes) (ie the columns in detail view), could this be assigned to hide/show process status? Now I'm starting to think of global hotkeys...
As to the "get some more info" I alluded to above, by that I mean asking a few more questions. I'm thinking they belong in this post rather than a new one over in general questions because they are linked to my rambing above - feel free to move them if I'm thinking wrong.
o What is the aim of the megui project? How close to completion is it so far? Has it changed over time (well, "how much" is a better question). Rather broad question, I guess i'm looking for an answer that goes something along these lines: "megui is a tool that allows the user to do everything required for video conversion (specifically DVD ripping) with a frontend that strives to be as simple and clear as possible while maintaining high level of control without excessive heirarchisation of the program". Or whatever it actually is. In other words, do you want to make AGK or GK?
o Is there an overarching design philosophy to the GUI?
o berriman has mentioned before he dislikes project files. Could you explain the problems you have with project files? Personally, the big problem I have with them is that they are essentially meta-meta-files and they always use evil filing systems which involve a seperate directory for every one line .txt file generated.
o If any question doesn't belong in this thread, it's this one. Why oh why does megui take so damn long to start up? ;)
I'll also try to add any answers to these to the wiki - it's been a bit stagnant lately.
foxyshadis
6th August 2006, 11:27
After all this I went out for lunch and couldn't stop thinking about the workflow layout, and the UI of megui in general (I'm glad I was eating alone ;)). I've got a few ideas for a (major/show stopping) revamp of the megui interface, but I'll hold back posting about them until I work out a mockup and get some more info so they are a bit more than the frivolous words doom9 loves so much :-P.
Suggestions are always welcome. Can't promise even good ones would be feasible to implement, though.
Now, back to the accelerators, divx AVI muxer would seem to be better written into the menu as '&AVI Muxer' and the avc2avi frontend as '&h264 Muxer' which means both can use the first letter of their title, making learning the shortuts for a relatively obscure section of menu a whole lot easier.
MeGUI doesn't use h264 anywhere else, so no. However, they could be XviD AVI Muxer and AVC AVI Muxer. Somewhat clumsy but it could be worse. Or we can just call it AVI Muxer and let it handle both types - although it seems kind of silly to not just use the adaptive muxer, since that's why it was developed.
Since we have plenty of alt-#s free it would be nice to allocate the h264 matrix editor alt-0
Both of the AVC tool menu items will go away, they don't belong there at all. Particularly since I discovered megui does validation on script load, so no need to worry about having to open the config panel just to validate. The matrix editor will be completely incorporated into the custom matrix selection box.
(although since that's a semi special shortcut it could be saved for something else?). Also, if the profile centre will ever become a reality we should work out where it fits into the numbers now and reserve the shortcut for it to avoid future confusion and yet more shortcut refactoring.
Finally, if you can do it, pleasepleaseplease set prefs to open with 'alt-,'. Although it's a rare key combo on windows the likelihood of it ever being a problem is low and I'm sure a lot of closet / previous mac owners will thank you :-P. alt-. is often used for view options on macs too (see itunes) (ie the columns in detail view), could this be assigned to hide/show process status? Now I'm starting to think of global hotkeys...
If I'm convinced that unavailable shortcuts are necessary, I'll add the overrides for it. I just like to keep it simple until then. By default, this is the rather pitiful list of usable shortcuts (http://windowssdk.msdn.microsoft.com/en-us/library/system.windows.forms.shortcut.aspx). Punctuation isn't on there.
o Is there an overarching design philosophy to the GUI?
Accretion? :p
o If any question doesn't belong in this thread, it's this one. Why oh why does megui take so damn long to start up? ;)
Loading and initializing the stupid framework. Try closing and reopening, it should take less than a second since .net's loaded.
Doom9
6th August 2006, 13:06
No alt-letter? :<I thought that too. Then again, if we have numbers, using Ctrl makes a lot more sense since Ctrl-X are normally direct accelerators where Alt-x are menu accelerators (Alt-F = open the file menu, then Control-O to open a file). So I think it makes more sense to stick with that and just replace the accelerators that conflict with common windows accelerators (notably Control-C, Control-V, Control-X, Control-A).
So for the one click encoder we could have Ctrl-1 (1-click...). Then AviSynth script C&reator. D&2V Creator. Ca&lculator and C&hapter creator. Alt-M serves as a shortcut to the muxer submenu, Alt-E to the encoding menu, Alt-T to the tools menu.
And speaking of the tools menu, I've never really liked the changelog in its own tab.. I think making it a menu point in the Tools menu (or pehaps a help menu with one link to the changelog, another to an about screen and another one to the megui wiki) is more in line with other software.
In other words, do you want to make AGK or GK?Both.. be default GK but with one click profiles we've entered AGK territory. And it's far from completion.. there's no vobsub handling, no avisynth script cutting and I have a feeling we could do more in the DigiTV area.
Is there an overarching design philosophy to the GUI?I believe it's called chaos ;)
Why oh why does megui take so damn long to start up? The curse of non native code combined with many gui fields?
berrinam
6th August 2006, 14:31
And speaking of the tools menu, I've never really liked the changelog in its own tab.. I think making it a menu point in the Tools menu (or pehaps a help menu with one link to the changelog, another to an about screen and another one to the megui wiki) is more in line with other software.I like this idea.
Both.. be default GK but with one click profiles we've entered AGK territory. And it's far from completion.. there's no vobsub handling, no avisynth script cutting and I have a feeling we could do more in the DigiTV area.
...
I believe it's called chaos ;)Agreed. No-one with enough time has come along to help to make a steady goal. I'm working gradually to make it more extensible, but I don't spend much time on MeGUI any more.
However, the goals that guide MeGUI in my mind are:
Give the user complete control when he/she wants, but also make it as simple as possible for the casual user, but still get as good quality as possible. To achieve these, we (a) integrate profiles, so people needn't choose their settings and (b) integrate advanced tools such as autodeint and the adaptive muxer.
Work towards minimizing the point-of-presence time required for an encode, through automation such as the one click encoder.
Fit together into a nice package.
At the moment, I'm working on the infrastructure to make it more package-oriented. I don't know when it will be in a commit-able stage, but it is getting there. Unfortunately, since it's a big commit, it's likely to add another whole heap of bugs, so I will try to commit it as a branch. I would be pleased if someone else could do some work on it, so just say something if you want to help. This should hopefully make it more bug-free in the future, though...
berrinam
6th August 2006, 14:35
By the way, I don't remember my objection to project files, but perhaps it was about the problem with .NET 2.0 versus .NET 1.1, and the project files not being compatible. Anyway, it is no longer a concern of mine, even though I still think MeGUI should remain compilable using compile.bat.
berrinam
6th August 2006, 14:47
Any idea how I can branch in SVN? This can normally be done easily with branch in TortoiseSVN, but I don't know how well it will work here, since megui is in the root directory, not in the trunk directory. Any idea what I should do, or should I just commit it to the trunk for now, and then we can all work on fixing it up as soon as possible?
EDIT: Mind you, a test on a local SVN repository with the same situation worked out with no problems, so perhaps it is ok to do...
henryho_hk
7th August 2006, 01:29
foxyshadis, megui is putting too many filter DLLs in the default plugin directory. Can you make an "AVS filter directory" option and let us put them in a separate directory?
foxyshadis
7th August 2006, 01:44
Ah, the old Avisynth 2.5.6 problem. That shouldn't be a big deal, but it'll mean rewriting some things, and deciding which plugins deserve to be in the main directory vs a branch. Hmm, there's only 13 and they all look quite useful in general... Now the rest of the files spamming up the folder can be put somewhere else no prob, into a "docs" folder or similar.
Berrinam, TortoiseSVN has a branch/tag command to create a new branch in svn. Either way, I'd like to see it before I go tweaking too many of the internals if it'll change everything around.
berrinam
7th August 2006, 10:11
I've made a branch with the refactor, and there's a readme.txt left in it. It has some changes started. You can get it from https://svn.sourceforge.net/svnroot/megui/branches/refactor.
It compiles already, but hasn't really been tested. If someone else (say, foxyshadis, if you're interested) could look at it and make some changes/suggestions, it would be good.
Cheers
Sharktooth
11th August 2006, 14:40
@devs: please check this: http://forum.doom9.org/showthread.php?p=861792#post861792
In the meanwhile i forced the autoupdate to downgrade from dgindex/dgmpegdec 1.4.8. to 1.4.7
JoaCHIP
11th August 2006, 15:20
@ Doom9: The reason i'm so convinced that "Increase Volume automatically" should be disabled by default is that changing the volume is really something that changes the source. This contradicts the rest of the software package, where e.g. all the video settings are only there to help recreate the original content as well as possible. Any process that changes the volume must be seen as an effect and not a tool to recreate the original. And surely, you wouldn't enable a posterize or a sepia effect by default, would you?
Now your point about this being open-source is valid. I might look into the source code myself, if i get the time, but many of my comments are rather GUI-oriented, and i'm not a gui coder (under Windows), so i might not be able to contribute on these points without messing things up.
check
11th August 2006, 15:21
I'll speak up in support of the changelog tab - it's nice to be able to easily peruse it while waiting for the last minute of a job to complete. Hiding it away in the settings will also make changes between versions far more opaque for those who don't specifically seek out either the changelog or this thread - which could potentially lead to a lot of problems if a large change is made. I'd like to even have MeGUI open up by default to the changelog tab after updating the core.
Now back to replies to my previous post. There's only really one point I'll comment on, the rest I'm satisfied with :)
For the accelerators in the muxer menu - I didn't even think of consistancy (:O), but I'd prefer Xvid + AVC titles so there can be first letter accelerators rather than harder to remember keys.
I've also been doing a little work on a totally new GUI for MeGUI - well I say it's for MeGUI, the reality is it's so different it would be just as easy to make a whole new frontend program and just steal the AVS creator :D. Once I flesh out a few areas I'm still having troubles with I'll upload my ideas - probably to a new thread.
Also also, I've been doing very little on the wiki lately and have a hankering for writing a large tutorial - any suggestions?
check
11th August 2006, 15:24
@ Doom9: The reason i'm so convinced that "Increase Volume automatically" should be disabled by default is that changing the volume is really something that changes the source. This contradicts the rest of the software package, where e.g. all the video settings are only there to help recreate the original content as well as possible. Any process that changes the volume must be seen as an effect and not a tool to recreate the original. And surely, you wouldn't enable a posterize or a sepia effect by default, would you?
Personally I would classify volume levelling (call it what you like ;)) as something that improves the original data, just as the denoising options in the AVS creator do.
Doom9
11th August 2006, 15:52
Any process that changes the volume must be seen as an effect and not a tool to recreate the original.Any DVD player does the same upon playback.. that checkbox state will be changed over my dead body.
In the meanwhile i forced the autoupdate to downgrade from dgindex/dgmpegdec 1.4.8. to 1.4.7Not necessary.. I'm working on a new version as we speak. It will also contain cleaned up shortcuts and fixes the muxing size bugs we currently have for both mp4 and mkv (well.. mp4box and mkvmerge got new commandlines so it's not really a bug, but anyway).
And the changelog will no longer have its own tab but a nice resizable dialog window.
Sharktooth
12th August 2006, 02:59
@doom9:
in 2186: Form1.cs(4117,20): error CS0246: The type or namespace name 'Changelog' could
not be found (are you missing a using directive or an assembly
reference?)
Form1.cs(4117,39): error CS0246: The type or namespace name 'Changelog' could
not be found (are you missing a using directive or an assembly
reference?)
Changelog.cs was NOT ADDED to the SVN. Ensure you did SVN ADD (Changelog.cs) before committing.
Doom9
12th August 2006, 20:49
Why on earth aren't those svn program a little smarter?
Sharktooth
13th August 2006, 03:52
well, it's just a matter of getting used to it.
that way, for example, you can keep local backup copies of changed files without messing with the online repository...
chros
13th August 2006, 10:20
What kind of software do I need to help you develop ?
Visual Basic 2005 ? (Isn't there out any smaller package ?)
And what is your preferred svn client on WinXP ?
Sorry for these lame questions .... :)
berrinam
13th August 2006, 11:00
TortoiseSVN
MeGUI is written in C#. As an absolute minimum, you can compile by running compile.bat once you have installed the .NET 2.0 framework. However, Visual Studio Express Edition 2005 for C# is recommended. That should be all.
chros
13th August 2006, 11:26
Thank for the quick answer.
I have installed MS Visual C# 2005 Express Edition (I guess it's the right software.)
Do I need to know something special to the megui svn ?
eg. Is this command what I need?: svn co https://svn.sourceforge.net/svnroot/megui megui
berrinam
13th August 2006, 12:06
Umm..... that will be ok, but it would be easier to use TortoiseSVN. Once it is installed, right-click in a folder where you want to download the source code to and click SVN Checkout...
choose https://svn.sourceforge.net/svnroot/megui for the URL of repository and set the other settings appropriately. Then, press OK and you're done!
Doom9
13th August 2006, 12:08
The command you posted is for the commandline version of svn.. if you're using tortoisesvn all you need to indicate is the url of the svn repository of megui, so presumably https://svn.sourceforge.net/svnroot/megui (I have very little experience with svn but I got it working somehow)
Sharktooth
13th August 2006, 14:06
So, anyone knows if there's an OSS lib for FTP that supports PASV mode?
The Link
13th August 2006, 15:31
So, anyone knows if there's an OSS lib for FTP that supports PASV mode?Perhaps libCurl (http://curl.haxx.se/libcurl/)? I don't know what exact requirements you have since I'm not a programmer.
JoaCHIP
13th August 2006, 18:16
Any DVD player does the same upon playback.. that checkbox state will be changed over my dead body.
Yes, that's exactly why it shouldn't also happen in the encode.
Doom9
13th August 2006, 20:32
Yes, that's exactly why it shouldn't also happen in the encode.DRC is being performed when playing back DVDs. Not MP4s and not AVIs. Just search for something like "audio too low" and you'll see. As I said.. over my dead body so unless you're about to blow my head off, stop wasting everybody's time.
chros
14th August 2006, 08:35
@berrinam , @đoom9: thanks for the tips, it was working.
Sharktooth
14th August 2006, 15:21
0.2.3.2186
Commit by Doom9
- mp4box / mkvmerge got new split commandlines, adapted megui accordingly
- dgindex reports video % instead of film % when video % > 50 starting with v1.4.8, adapted megui to not apply forcefilm in such a case
- reshuffled menu shortcuts, megui no longer uses standard shortcuts like CTRL-A/C/V/X
- Changelog now has its own dialog
- Introduced a help menu with links to the megui wiki and the support forum
- Renamed Vorbis container to Ogg since that's the container's name
0.2.3.2187
Commit by Sharx1976:
- Cosmetic fixes (part 2...)
Doom9
14th August 2006, 19:32
I'm looking at the profile bug (new profile overwrites the currently selected one) and I'll go for the update button so that it'll be clear to everyone when a profile is updated.
Just one thing.. should pressing OK update the currently selected profile? And if not.. then I guess the profile shouldn't be returned to the main window, should it?
chros
15th August 2006, 00:29
So, anyone knows if there's an OSS lib for FTP that supports PASV mode?
Why do we need that ? (I was missing about 200 post ...)
If the nero aac encoder is the main reason (so we can update it from megui as well), do you know about ncftp ? (a crossplatform, opensource, command line ftp client)
http://www.ncftp.com/ncftp/
There is a 168 KB program in the package called ncftpget that will do the trick (and it knows passive connection).
http://www.ncftp.com/ncftp/doc/ncftpget.html
foxyshadis
15th August 2006, 03:11
So is it reasonably more stable now, that I can look at tweaking it again, or shall I just wait while other major changes are hashed out?
berrinam
15th August 2006, 07:06
I don't know if anyone has had a look at the refactor branch I made, but I see a whole lot of big changes going on in MeGUI. However, since it will take a while, can you say again what changes you want to make? Then I can tell you how much they are likely to interfere with what I want to do.
foxyshadis
15th August 2006, 08:24
Well, GUI changes, mostly referencing or changing values between the classes/panels - if they're going to be changed significantly it'll be a little pointless to do the binding work now. Particularly integrating the AVC options into the panel better, some xvid zone plumbing, and the profiles manager; and also splitting the profiles box into per-codec profiles.
I did look at your changes, but I'm not qualified to comment, honestly - I'm learning from you guys there.
For the future, what do you guys think of every codec being a dll? Too complex for the benefit of adding new codecs on the fly?
berrinam
15th August 2006, 08:57
For the future, what do you guys think of every codec being a dll? Too complex for the benefit of adding new codecs on the fly?This is pretty much the goal I'm gradually working towards. And it's not just for codecs, but also a few other things:
Tools (the things that currently appears in the tool menu, and can do anything)
muxers
pre- and post-processors (for bitrate calculation, intermediate file deletion, etc)
file sources (eg avisynth, d2v and mediainfo+dss for now)
encoders, or the more generic 'job processors'.
possibly even profiles? Basically, because the profile code is the same for each of the four types of profile, but supporting profiles at the moment requires a fair bit of copy+pasting, whereas it should be quite easy. However, this bit is yet to come.
The benefits are not only the dynamicity of it all, but also the cleanliness of the code.
Well, GUI changes, mostly referencing or changing values between the classes/panels - if they're going to be changed significantly it'll be a little pointless to do the binding work now. Particularly integrating the AVC options into the panel better, some xvid zone plumbing, and the profiles manager; and also splitting the profiles box into per-codec profiles.Feel free to change anything internal to the codec config dialogs (eg xvid and x264), since the video codec interface details have been around for a while and are pretty stable. The profiles are likely to change, however, so I would recommend leaving that alone.
Can you explain what you mean by 'splitting the profiles box into per-codec profiles'? Does this mean sorting by codec, or creating a list-view instead of a combo-box, or what do you have in mind?
Cheers,
berrinam
foxyshadis
15th August 2006, 11:51
Repopulating the combo box whenever the codec selected changes. Probably remembering the last selected profile with that codec.
It'll be interesting then, having essentially every class in its own dll. Are you going to call the zips .jar too? ;) Looking forward to see what shows up.
dimzon
15th August 2006, 12:48
So, anyone knows if there's an OSS lib for FTP that supports PASV mode?
http://msdn2.microsoft.com/en-us/library/system.net.ftpwebrequest.aspx
:D
berrinam
15th August 2006, 13:13
I don't think I will get to that stage for a while, but if I do, it'll probably look something like BeHappy.
Sharktooth
15th August 2006, 20:31
Why do we need that ? (I was missing about 200 post ...)
If the nero aac encoder is the main reason (so we can update it from megui as well), do you know about ncftp ? (a crossplatform, opensource, command line ftp client)
http://www.ncftp.com/ncftp/
There is a 168 KB program in the package called ncftpget that will do the trick (and it knows passive connection).
http://www.ncftp.com/ncftp/doc/ncftpget.html
... i could use the ftp.exe that comes with windows as well ...
i just prefer integrating the FTP capability into MeGUI.
Sharktooth
16th August 2006, 04:00
0.2.3.2188
- Cosmetic fixes (part 3...)
- Swapped Crop and Resize controls position in Avisynth Script Creator window to better represent the correct workflow
dimzon
16th August 2006, 10:21
i just prefer integrating the FTP capability into MeGUI.
Just use .NET 2.0 FtpWebRequest class (look @ my previous post)
PS. I'm planning to return to active MeGUI development next month. Currently I'm too busy @ my primary work + I'm preparing for futher certification...
PS2. Now I'm
http://img157.imageshack.us/img157/3261/mctsrgb512514507tl8.png
Doom9
16th August 2006, 12:05
@dimzon: you are doing certification wise what I ought to be doing at work.. but they keep me so busy I never get around to doing it.
You may want to have a look at this issue though: http://forum.doom9.org/showthread.php?p=863813#post863813
At the end of the line I suspect the script returns RGB32 which never will work, but I'd expect some kind of a useful error instead of a crash.
vBulletin® v3.8.5, Copyright ©2000-2012, Jelsoft Enterprises Ltd.