There are a few things under the hood: 1. I have several `connect` functions which have different type signatures: - For filter: https://github.com/mantielero/mlt.nim/blob/51245b9fea6ad1555687ff9229c66ca17a6d3ffb/src/lib/filter.nim#L5-L8 - For consumer: https://github.com/mantielero/mlt.nim/blob/51245b9fea6ad1555687ff9229c66ca17a6d3ffb/src/lib/consumer.nim#L30-L33 For this functions, I just map: `mlt_filter_connect` with the equivalent signature. 2. Given that they work with Service, I just create a number of converters. In nim converters, are used to change type automatically. You can see for example the following which coverts from Producer to Service automatically: https://github.com/mantielero/mlt.nim/blob/51245b9fea6ad1555687ff9229c66ca17a6d3ffb/src/lib/producer.nim#L8-L10 This enables using a `Producer` directly with the `connect` function without the need of getting previously the Service (that is done implicitly). 3. I just create the `>` operators in a way that for me make more sense visually: from the producer to the consumer. They just call `connect`.
I have wrapped the `mlt_service_attach` function (I wasn't aware of it). So now, the following works as well: ``` clip.attach( filter ) clip > sdl ``` https://github.com/mantielero/mlt.nim/blob/master/examples/ex05_filter_frei0r_attach.nim PS: sorry if the wording is not right. I am not a pro developer. Regards, José M. El sáb, 20 nov 2021 a las 20:34, Dan Dennedy (<d...@dennedy.org>) escribió: > Thanks for sharing that. Read more below... > > On Sat, Nov 20, 2021 at 8:54 AM José María García Pérez < > josemaria.alk...@gmail.com> wrote: > >> I implemented some examples in the Nim programming language. Nim compiles >> into C (among other languages). >> >> I like that it gives you the feeling of python despite it is using actual >> types. >> >> The code looks as follows: >> ``` >> import mlt, os >> var f = initFactory() >> >> # Create the default consumer >> var p = newProfile() >> var sdl = newFactoryConsumer(p, "sdl2") >> >> # Create via the default producer >> var clip = newFactoryProducer(p, resource = >> "avformat:/home/jose/Descargas/sygic.mp4") >> >> var filter = newFactoryFilter(p, "frei0r.pixeliz0r") >> filter["BlockSizeX"] = 0.1 >> filter["BlockSizeY"] = 0.2 >> >> clip > filter >> filter > sdl >> >> > > So, the > operator is mapped to both mlt_service_connect_producer() and > mlt_service_attach()? I do not understand how the sdl consumer is > connecting to the filter because the filter should be *attached* to the > producer, and the consumer *connected* to the producer. > > > >> # Start the consumer >> sdl.start >> >> while not sdl.stopped: >> sleep(1) >> ``` >> As I said, it compiles to C. If compiled in release mode, the executable >> only takes 115kb. >> >> This is just a starting point. You can see some more examples here: >> https://github.com/mantielero/mlt.nim/tree/master/examples >> >> Regards, >> José María >> >>
_______________________________________________ Mlt-devel mailing list Mlt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mlt-devel