On Sat, 2009-01-10 at 12:13 +0100, Georg Martius wrote:
> Hi Francesco,
> 
> You know that I am rather new to transcode so please keep this in mind when 
> reading my comments ;-)

It's good to hear something new :)

> I just want to say that I like the idea to have a sequence of processing 
> nodes 
> with little streams between each node. 
> I would like to add that also the properties structures have to be processed 
> through the processing chain. What I mean is that every processing node can 
> change the frame-size, frame-color model and so on. Each node just gets the 
> structure information from the previous one, that's it.

I mostly agree. Of course one of the objective of the chaining code
should be to minimize the expensive transformation (say, colorspace
conversions) as much as is possible.

>  I believe the meta 
> information and the actual frame should be dislinked. The meta data is not 
> changing over the processing time and has to be saved for each intermediate 
> stream whereas the frame-data changes. 

That should be a property of the TCProcessingItem into the former
example.
(BTW, another big thing to sort out properly in order to develop my idea
is how to handle the input probing).

> I see the following:
> 
>  Processing                                 Processing
>                       ->  Stream  ->                          -> ....
>    Node1                                      Node 2
> 
> where Stream has a FIFO (sliding window type) for frames and meta-data. 

The siliding window thing becames irrilevant if Node1 is
single-threaded.

> Frame 
> number or only valid within a stream. If we would limit the multiprocessing 
> to one thread per Processing Node then there is also not problem with 
> out-of-order frames.

Excaltly. Moreover, in the common case, one thread per node is likely an
overkill. More nodes (I intend Node=TCProcessingItem as in my former
example) can be effectively handled by a single thread.

Maybe it could be nice to add some kind of "declared weight" for each
node and collect nodes into threads until the sum of the node's weight
reaches a threshold (some kind of automatic load balancing).

>  In the case we need more threads per Node I suggest to 
> have a small multithread wrapper around the particular Nodes that need it. 
> Nodes that might clone or skip frames might not be necessary to run in 
> parallel and have therefore less problems with framenumbers. 

IMHO that should be handled trasparently by the underlying TCModule.
Of course no more than one TCModule for TCNode :)

> Concerning the move to a new executeable I fear that if we share the same 
> modules we might block ourselves since we cannot change their interface.

Well, the module interface (I mean libtc/tcmodule-data.h) itself should
be separated by the client code by at very least one incapsulation
layer, so this should'nt be a big deal.

What I try my best to achieve is to a better separation between layers,
so, say, a change of interface for modules affects little or nothing the
client code.

> I would make a change to the next major release (1.2.0).

On this topic, I haven't no changes on my own list for 1.2.0 (neither
for 1.3.0) except minor things (maybe a few more methods for modules).

I'm of course collecting the drawbacks and shortcomings of existing
API/implementation, but I do want to see a NMS-powered transcode
deployment into the wild before to do big changes. So, at very minimum,
nothing serious should change (on my side, of course) until 1.3.0

> I see the scripting interface totally decoupled from the change in the core 
> architecture. The latter is a backend change and the scripting interface 
> is "just" a way to control things, so a frontend.

Indeed :)
Neverthless I find it really cool ;)
Moreover, applying a scripting interface upon the structure outlined
into my last mail is WAY easier than applying over the existing one.

Bests,

-- 
Francesco Romani // Ikitt
http://fromani.exit1.org  ::: transcode homepage
http://tcforge.berlios.de ::: transcode experimental forge

Reply via email to