XaiJu
wacup
wacup

patreon


WACUP Development Update May 2021

For those of you not in the Discord server I thought it might be nice to get an idea of what's been going on since the last beta / preview build was made available almost 3 months ago (that time has flown by) & also to be a small perk with being a WACUP patron until the next build eventually appears.

The #7236 build is fair to say has been the most popular WACUP preview build so far & I'm thankful that the issues with the prior site hosting didn't happen with that build. The new hosting seems to be doing what I want in that I've not had an complaints or detected outages & it's doing as it's meant to albeit being noticeably faster based on the comments at the time of the migration.

With the site migration out of the way & the initial triaging of issues that had arisen from the preview build, I went down the rabbit hole with a few of the reported issues that have led me to finally drop the use of the Winamp 5.666 media library core plug-in (gen_ml.dll) & instead use an all WACUP provided implementation as part of the WACUP core (there's an easy option on the Media Library preferences page to enable or disable the whole media library feature).

-

But why not do it as a plug-in you might be asking? It did start out as a plug-in but as the aim of WACUP is to provide Winamp 5.666 compatibility, having the ability to always support the Winamp Media Library plug-ins (with the handy on/off switch) just makes things more consistent within the source code along with sharing more common code between the handling of all of the plug-in types.

That makes for smaller code size overall & a few 10's of kilobytes is negligible on the size increase on the WACUP core dll vs the overhead that doing it as a plug-in would be. It also makes things simpler to ensure how & when the media library plug-ins are loaded to help minimise the impact on loading times that they can cause (especially a cause with the local library plug-in depending on the size of the local library database to load).

There's going to be some aspects that are incomplete at least for the first beta build with this change (e.g. no skinned menus & missing icons in the navigation list & a few other places) but that's not critical vs testing the new core is working correctly.

-

After getting the media library core handling swapped over & slew of related changes which I'm hoping will make WACUP faster to load compared to the current build & definitely so compared to Winamp 5.666 (that thing is very clunky feeling to load when I do have to use it for comparison testing), I moved on to taking over the remaining classic skin drawing of the main & equaliser windows.

Up to now, the classic skin handling has been a mismatch of the Winamp core doing something aspects whilst other parts have been done by the WACUP core. This mismatch had become an issue with some things not being drawn due to the calls to the Winamp core not being run or the replacement handling not being able to be complete in how it works (e.g. the workaround that was needed to avoid triggering the playback buttons on the main window when toggling its windowshaded mode).

This has been slow going as there's a few aspects (mostly related to the equaliser core - see below) that still require some interaction with the Winamp core & whilst my x86 assembly patching isn't the best, I've hopefully got something that will work without crashing.

Replacing the equaliser core is something that I've got to come back to & I've still to pick a solution so for now using the Winamp core for it is still going to be a thing for a while.

Back to the skinning, the importance of taking over this from the Winamp core means once the replacement implementation has been confirmed as good, I can start to make subsequent changes that'll allow for leveraging alpha transparency in png files for the classic skin elements which I know is late to the party but for those who might still be interested it might make for some interesting post-Winamp era classic skins. For example the edges of the main window will be able to have smooth corners with blending compared to the fake transparency that classic skins currently support & which are hard-cut edges.

There's also the scope to offer higher window scaling though whether it's as customisable compared to the Winamp3/ modern skins I don't know as the initial testing of upscaling a classic skin main window often doesn't look nice if not done at a whole multiplier (e.g. 2x, 3x, 4x) due to a lot being designed for the pixel art aesthetic.

-

The final main aspect of what's been done is going through & removing any of the live patching that I've been doing where I can be certain that it's no longer needed. This has been a bit tedious & from a user view point probably doesn't make much sense as it's all under the hood stuff but it helps to have gone through this & done the clean-up / removal.

By doing so I've been able to confirm that either the Winamp core is no longer running certain actions (e.g. related to the main playlist) or that some are still being called but with the other work done I can basically turn them into non-functioning (NOP) method calls (e.g. some of the skin initialisation methods) that don't need to be duplicated with the handling I'm now doing.

There's still annoyingly for me around a third of the live patches still in place but fewer is always a good thing since I'm itching to get to the point of dropping the Winamp core completely.

For reference, I count the Winamp core as anything that's directly provided by the original winamp.exe from 5.666 (named winamp.original in the WACUP installation folder) & the tricky aspects are going to be equaliser (mostly from needing to find a good quality solution) & some of the Wasabi related configuration / services (these weren't documented in their Winamp 5.x versions so need to be reverse engineered to determine the interface).

Once the Winamp core is gone, not only will be back to a more normal program setup with just 1 exe running (unlike the 2 at the moment), I'll then be a position to start dealing with the command-line & file association / shell handling which hasn't been worth trying to patch it & then have to contend with removing it & implementing it natively when it can just be implemented once (hopefully with it working :) ).

-

After all of that waffling, if you've made it this far, lets see if the Patreon post will mangle the interim changelog for what will become v1.1.0 beta which reveals a few more things that have been worked on including some hopefully welcome additions.

-

So I think that's it for this update & hopefully it's understood why things have been quiet on seeing a new beta / preview build. I also appreciate that if what I've been doing works correctly then at least visually it shouldn't be obviously different compared to the current build apart from any intended classic skin related drawing fixes.

This is always an issue I see with the perception of WACUP when I'm gradually re-making Winamp whilst using aspects of Winamp which definitely causes the line to blur on what's doing what which was something I always tried to achieve back when I was just known for making Winamp plug-ins :) It's also why I want to drop the need for the Winamp core so it is clearer to describe WACUP as a standalone Winamp 5.666 compatible player.

Final thing, thank you for supporting WACUP. It is very much appreciated even if I don't directly say it to everyone who has taken the time to become a patron & allow me to keep working on WACUP.

-dro

Comments

thanks for the info man!

ricola


More Creators