But i did think a loooong time about it. Have been busy latly with all sorts of stuff, but i did make some changes to the implementation and there's a code structure in my head.
Here's the proposed Interface definition ( the changes make it possible to make an initial version that just supports 1 codec (less work) but make it more manageable to add truckloads of codecs. ---EncodingServer Interface Definition--- initEncodeJob(source, friendlyname) this initializes the process of qeueing an encoding source can be a DVD (wich is a device or a directory) or a file, this is autodetected. Friendly name is a nice name for the encoding job to be created. This method returns a unique id identifying the encoding job, so multiple clients can use the encodingserver at once without a problem, and qeueed jobs (that aren't executed yet) can be edited or removed getVideoCodecCAP() Get's a list of available video codecs (to pass with setVideoCodec). It is generally a VERY good idea to call this before setVideoCodec. It will make it possible to extend the encoding server more easily. setVideoCodec(id, vcodec, tgtsize) Sets the video output codec, initially, only xvid (and probly lavcodec will be supported). Tgtsize is the targetsize of the encoding in mbytes. getAudioCodecCAP(id) Get's a list of audio codecs that are supported. THe job id is required (thus it must already exist) and there must be a video codec set (because the choice of audio codecs is determined by the video coded selected. Although this isn't 100% true, it should work pretty well. Or should i also add a get/setContainerFormat (avi, mpg, ogm etc)? setAudioCodec(id, acodec) Same as setvideocodec but for audio getFiltersCAP(id) Gets a dictionary with available filter/processing operations. The dictionary has a list of options for every "key" aka filter. This could be something like { deint : ['deinta','deintb']; crop : ['4/3','16/9','Cinemascope','Autodetect','None']} It makes it easy to add more filters when they become availble (or when we need them). setFilter(id, filter, setting) Activates a certain filter and set's it's value. qeueIt(id, now) Adds the job with id to the encoding qeue. If now is specified it starts directly, otherwise it will start in a timeframe specified in the recordserver config (fx at night). I also think that for direct rips from dvd, encoding should always be started now. getProgress(id) Returns 0 if the job has not been started yet, or a tuple (pass, progress, trem) if the job is being executed. pass being a name describing the current pass (fx Audio, Video pass 1 etc). Progress is a number between 0-100 describing the progress, and trem is a string with the estimated time left for completing the current pass. removeJob(id) Removes a job from the encoding qeue and cleans up listJobs() Returns a list of tuples, each tuple containg id and friendly name (id, friendlyname) setNiceness( id, nice = 0 ) getNiceness( id ) getVersion() returns the encodingserver version. I plan to make the encodingserver in such a way it doesn't require all off freevo to be functional (for remote machines). This adds the risk that client/server will not get updated in sync. Revision is just a number that increases +1 every time a change in the code happens (ie on every commit). Some of gustavo's process control functions will probably be implemented too stopJob(id) --> just stop. Later process will resume from the lastest place it could. IE: IF you pause in the middle of encoding, but already rip, you're back to the begining of the encoding process again, when resume. With this you can reboot your machine, for example. restartJob(id) --> resume from stopJob() pauseJob(id) --> Just SIGSTOP process resumeJob(id) --> resume from pauseJob() (SIGCONT) ------ I also got a nice diagram i made ith Kivo (had to test it sometime ago) and i made a structural diagram of encodingservers implementation :) http://dancevision.blub.be/img/encserver.jpeg Comments? ------------------------------------------------------- This SF.net email is sponsored by: IBM Linux Tutorials. Become an expert in LINUX or just sharpen your skills. Sign up for IBM's Free Linux Tutorials. Learn everything from the bash shell to sys admin. Click now! http://ads.osdn.com/?ad_id=1278&alloc_id=3371&op=click _______________________________________________ Freevo-devel mailing list [EMAIL PROTECTED] https://lists.sourceforge.net/lists/listinfo/freevo-devel