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

Reply via email to