From: Alexander L. <Alexander@Leidinger.net> - 2001-02-22 14:19:23
|
[lame-dev CCed] On 22 Feb, Peter Gubanov wrote: > Hi Alexander, dshow & version.h: Sorry, dshow didn't uses version.h, the dll uses version.h. >> Hmmm, please correct me if I'm wrong: >> - lame.dll wrapps the bladeenc API around the lame API >> - dshow uses the dshow-API >> - there's no dll with the lame API >> >> If I got it right, shouldn't we: >> - have a dll with the lame API >> - a tiny dll which wraps the bladeenc API around the new lame dll >> - a tiny dshow which wraps the dshow API around the new lame dll >> This would allow one only to replace the new lame dll and both API >> wrappers can use it. > > You are right, this would be the best way, if not a few problems. First > of all, calling DLL routines directly adds some performance overhead. > This is not a problem if we implement DLL as a COM object and force > wrapper DLLs to use this COM object. The second problem is LAME itself. > AFAIK there is still vaprintf(stderr,...) and exit calls instead of I can only find exit calls in mpglib and the frontend, I've used grep -r exit . |grep -e "^.*\.[ch]:" | grep -v -e "^\./misc" to locate exit calls. > exception handling or error codes - this is a disaster for DLL, and for Yes, this is also not good for a unix library. :-( > now DS filter can crush if you eneter invalid parameters. Changes to > LAME API have ceased only recently. > > We should start with error handling - probably exception handling will > be the best way, by I don't know much about exception handling in Linux > and its portability to VC++ (C++ is standartized only in ANSI - MS still > uses plenty of incompatible extensions). If exceptions are not good, we > can use error codes (slows down, but works). Error codes are more portable. > Parameter checking and parameter tuning methods. AFAIK there was a plan > to implement tuning methods like set_bitrate/get_bitrate, but no one > have implemented them. How do I validate a parameter set from Please mail me a list of elements in the gfp for which you want a get/set function. A proposal for the name of the get/set function would also be nice, e.g. quality: set_lame_general_encoding_quality VBR_q : set_lame_VBR_size_to_quality_rating (?) What about possible error values and how should they be returned? For the set functions: - returns 0 on success - <error-code> on failure For the get functions: - do we want to pass a pointer to a result var and handle the return value like in the set functions? > application? Et plus, the parameter set for LAME is growing - for DS > filter and bladeenc it is frozen. This is also a problem. I don't think so. DS filter and bladeenc-emul can only provide a given subset. Every other parameter has to use a default value (which perhaps gets set depending on other parameters). > As soon as we solve these problems, we can start thinking about LAME API > DLL or COM object, until then there is no worth bothering with wrappers. Yes. > Converting DS filter to a DLL wrapper is a matter of 4 hours, but > modifying LAME is a big deal. And I'm afraid to take error handling for > myself, because I don't have enough time to do it quickly. If someone It hasn't to be done in just one commit. We can incrementally work on it. First, we should locate bad points in the code: grep -r printf . |grep -e "^.*\.[ch]:" | grep -v -e "^\./misc" | grep -v "sprintf" shows 273 lines of code ({f,vf,}printf). Proposal: - wrap them into an lame specific print function - provide the possibility to let an user replace the wrapper function with his own code > will work on error handling and parameter set, I (or Marie) can take COM > interface and wrapping bladeenc and DS around this COM interface. Bye, Alexander. -- "One world, one web, one program" -- Microsoft promotional ad "Ein Volk, ein Reich, ein Fuehrer" -- Adolf Hitler http://www.Leidinger.net Alexander @ Leidinger.net GPG fingerprint = C518 BC70 E67F 143F BE91 3365 79E2 9C60 B006 3FE7 |