Those following me on twitter will have seen that I was away on holiday last week (with the surprisingly nice weather that the north east of the UK saw) along with preparations for that (getting camping gear sorted and everything related to computer backups) and the bank holiday we had in the UK the week before (#19), I’m a bit out of kilt on where I should be by now.
That’s not to say that I’ve not been doing things but it’s not as much as I’d liked to have seen done as I’m my worst critic on what I want to achieve vs what I’m actually able to within the time available. So in no particular order, lets see what I got up to…
The first thing which I’d missed from the development Winamp build that I’d made (which is now lost to the ether) was to change the ‘Podcast Directory’ node to show the ‘Subscriptions’ node instead of a broken / blank web page as well as renaming it to just be ‘Podcasts’ in the library and the preferences as needed.
This just makes more sense as the web page doesn’t work post-sale (it could be changed via the preferences in 5.66x to something else that if updated could integrate with Winamp) but I also removed those options from the preference page to avoid confusion (without the Winamp integration it’s just simpler to create a custom online service page to host the page instead).
The next thing is one of those little things that I admit I messed up with the 5.66x releases and is related to the Media Library -> Tree Options preferences page when ml_disc.dll (CD rip & burn) is not present.
What is meant to happen is that the ‘CD / DVD items’ section is hidden if the ml_disc.dll plug-in is not present (which is best to disable if not being used as it slows down Winamp’s loading by a fair bit) but it wasn’t correctly repositioning the ‘Downloads’ section to account for the hidden options. So now via a tweaked preference page dialog that is happening.
Another small addition related to above is adding an option on the Media Library -> Tree Options preferences page to keep the ‘Downloads’ item visible when the download list is empty. The default behaviour is for the ‘Downloads’ item to be hidden if there is no items remaining in the downloads list but there was a hidden ini option which would keep it showing which this new option now allows to be more easily accessed.
The next thing was to do a code review and minor update of the ‘Nullsoft Waveform Wrapper’ plug-in (in_wav.dll) which I’d created back in 2007 and was part of the Essentials Pack which is the spiritual predecessor of what I’m now trying to do. This plug-in (now renamed to just ‘Waveform Wrapper’) allows for some older variants of WAV files to play along with those containing MP3 audio (which gets redirected to the MP3 input plug-in) so its inclusion is about ensuring things just play without having to worry about the finer details.
As we saw in the prior weekly update, I’d added a number of diagnostic pages. I’ve added another one titled ‘Modern Skin Settings’ which shows a parsed copy of the ‘studio.xnf’ file (usually found at %APPDATA%studio.xnf) which is used to hold settings that only relate to when the skin is the active modern skin. This was done whilst I was trying to work out why some of my tweaks to a broken modern skin weren’t working correctly which ariszlo finally sorted out after making sense of what I was trying to do (hiding windows and stuff like that).
As some might have realised, I want to see a Winamp that starts faster as well as close faster (which if only from a development viewpoint makes things a bit faster to test new code or not lose settings) and there’s already been a number of optimisations done which do that (e.g. the ini file read / write cache).
Another small optimisation that I’ve added is that the loader now pre-caches the api_service pointer which plug-ins updated to leverage the pack can use instead of requiring them to have to call IPC_GET_API_SERVICE via SendMessage on loading.
The point of this is that the fewer SendMessage calls that need to be made on loading can help reduce loading time as depending on how many plug-ins are installed, the more that get loaded can mean more plug-ins effectively checking the messages (when sub-classing the main Winamp window) and that can lead to a slow down if it’s not optimally done. So by removing the need to do this and just get the pointer directly, the loading time is reduced.
As Winamp and WACUP is based on using some supporting libraries, I’m tracking updates for them and one which is somewhat key if using modern skins or albumart is libpng for reading and writing PNG files. As seen a few weeks back I’d implemented a replacement png.w5s component for handling PNG files which was a bit faster on loading. Well I’ve now done the work needed to instead use the newer 1.6.22 release which simplifies how to get the ARGB32 data that Winamp wants as the 1.6 branch of the library does the processing needed instead of having to mess around with the data after it’s obtained which makes things cleaner.
I’ve also since (and which should be counted as week #21 work but it best fits in with this) updated to the 1.6.23 branch and applied the Google supplied SSE2 reading optimisations which gives more of a reduction in the time to load PNG files over the existing compiler optimisation which had been applied on my prior build of the replacement component.
The next batch of changes relates to the JTFE plug-in and doing what some might find should have been done (or rather not done) in starting to split out additional features it provided which in hindsight wasn’t the right thing to do but then as at the time I wanted to provide certain features to older Winamp releases or to get requests in that the dev team wouldn’t do (or couldn’t do as there wasn’t one as was the case in 2004) then it made sense.
So the first change was moving the Unified Alt+3 dialog additions (forward / back navigation buttons) as well as the browser for folder addition on the Edit Playlist Entry dialog.
The next thing was to move the classic skin windowshade support which now allows the mode to work irrespective of the JTFE plug-in being installed / activated. There’s still some more to do with it (i.e. provide the long missing drawing override so this looks better than it trying to piece together the parts from the existing skin resources (e.g.pledit.bmp)). The option for this is now provided on the Skins -> Classic Skins -> Classic Skins Options preference page instead of under the Jump to File -> Extras preference page.
Due to that reorganisation so that everything will fit in the default preferences window size, the litestep related options were removed from the preferences page and the related litestep functionality has been disabled with some patching out of the code. I’m not expecting this to be an issue as I’ve not come across anyone using litestep in a decade.
On a plus side with the moving of this code around, I’ve improved it so it now uses less memory by not duplicating per-window the skin bitmaps that are used which depending on the setup is a few 10’s of KiB saved (not a lot but every little bit helps).
The next thing which is still incomplete due to going on holiday, was beginning to move the the Icon Library Pack support, ‘File Types’ preference page improvements and the Shell integration options. This also means that what remains of the the ‘Extras’ preferences page now is moved to be a sub-node of the ‘Playlist’ preference node as with all of the other options that have been removed it just leaves playlist options (as seen below).
Ideally I’d like to remove the ‘Extras’ preferences page completely and have those options on the main playlist page in some form (probably with doing something to re-organise the options on the main ‘Playlist’ preferences page to be tabbed preferences) but will see as it’s a lot simpler to disable native settings than it is to add new ones.
There’s still a bit more work that needs to be done to get all of the explorer related parts finished off with the moving into the loader instead of being in the plug-in but it’s coming along. There’s also a few other aspects like the colouriser api (which is used for highlighting the queued items in the playlist) that need to be moved out of the plug-in. I’m also considering dropping the favourites queues in their current form and possibly trying to have them integrated in via the library playlists (as there’s a lot of overlap between the two which is a bit redundant).
Another preference addition (I do seem to have done a fair bit of this it seems) is that I Implemented a preference option to disable the native video support on the ‘Video’ preferences page. This is manipulating the hidden ‘no_video’ configuration option that was added in the 5.66x releases but due to the time was not done as a UI option to save some time in not having to update all of the language packs at the time.
By disabling native video support, the main menu item, preference page and video window are completely removed and it effectively returns Winamp to just an audio-only player like in the pre-2.9x days,
This does not prevent some old 3rd party plug-ins from implementing their own video options and any well-behaved 3rd party plug-in should not have issues with all of this being disabled (e.g. those that leverage the video window to act as a placeholder).
To re-enable the native video support the ‘no_video’ option needs to be removed from winamp.ini when Winamp is not running. I think this is ok to do though I may consider adding a command-line option if there’s a demand for doing that so it can be toggled on / off via a shortcut.
The next thing which some may have already noticed if you’ve properly looked at the screenshots is the inclusion of my Playlist Separator plug-in (in_text.dll) which allows custom separators to be inserted into your playlist to split sections or to add in stopping points when reached along with a plethora of other options.
How this plug-in has had to work has never been 100% ideal but as I’m no longer confined to play by the rules, down the road I hope to make the playlist integration better regarding numbering of the playlist entries vs separator positions so that they don’t visually count in the playlist editor’s numbering.
And the final thing which is also incomplete due to timings and came about from looking at the ‘File Types’ preferences page and what can be done to improve it (which will be covered later on when I’ve more to actually show) is that I added a /AGENT command-line option which makes the loader program run in a compatible way to emulate the Winamp Agent (winampa.exe) without the need for another full process (program file) to be running.
The Winamp agent is basically a way to access some Winamp aspects more quickly (depending on how it is used) as well as maintaining (if enabled) a notification icon for quicker loading of Winamp. It won’t do anything else to the system like preserving file associations (which the original agent hasn’t done for years anyway).
Also due to how the loader program works, this causes this emulated agent mode to use much less memory compared to the original Winamp agent (~0.5MB vs ~5MB on first loading on Windows 7).
This replacement version will also add the ability to access the Winamp library playlists in addition to the existing bookmarks and CD drive support of the original Winamp Agent. I’m also looking at if I can get it to only need one loader instance to be running (e.g. loader + winamp original) instead of loader + winamp original + loader if winamp and the agent are enabled (as loader + winamp original is what is running if Winamp is just running anyway).
So that’s it for this somewhat long combo update and there’s a few things that I’ve got outstanding that I’d said I’d do last time that I’ll need to get done this week. So I’m now back to normal service I hope and I’ll need to knuckle down over the next few weeks if I want to achieve my first beta target date :eek: