melt example is working fine and so does the C version with the line you added (that was the piece that wasn't very clear to me about how to do it in this case, so thanks a lot).
Regarding Nim, the problem was with the way I was creating the filter (I was sending an empty string rather than NULL in the third parameter). Thank you both for your kind support. El sáb, 1 ene 2022 a las 19:24, Dan Dennedy (<d...@dennedy.org>) escribió: > > > On Sat, Jan 1, 2022 at 8:10 AM José María García Pérez < > josemaria.alk...@gmail.com> wrote: > >> I managed to write a pure C example, and I am getting something similar >> to what I get with NIm: >> > > But what you wrote in C is not the same as Nim. In Nim, you are setting > filter properties, and in C you only getting them. Did you very your MLT > build is working for your example by using the melt command line? If not, > why? If you are going to just jump into the code, be prepared to debug. > This works for me: > melt -proifle hdv_720_50p -consumer sdl2 +hello.txt -attach affine > transition.fix_rotate_x=340 > > > >> // $ gcc ex02.c -I/usr/include/mlt-7 -lmlt-7 -o ex02 >> // Inspired by: >> https://stackoverflow.com/questions/62983626/how-to-compile-a-simple-mlt-example-in-c >> #include <stdio.h> >> #include <unistd.h> >> #include <framework/mlt.h> >> >> int main( int argc, char *argv[] ) >> { >> // Initialise the factory >> if ( mlt_factory_init( "/usr/lib/mlt-7" ) > 0 ) >> { >> mlt_profile p = mlt_profile_init("hdv_720_50p"); >> // Create the default consumer >> mlt_consumer hello = mlt_factory_consumer( p, "sdl2", NULL ); >> mlt_properties_set_int(mlt_consumer_properties(hello), >> "terminate_on_pause", 1); >> >> // Create via the default producer >> mlt_producer world = mlt_factory_producer( p, NULL, argv[ 1 ] ); >> >> // Create filter >> mlt_filter aff = mlt_factory_filter( p, "affine", NULL ); >> >> mlt_properties affprop = mlt_filter_properties(aff); >> for(int i=0; i<mlt_properties_count(affprop); ++i) { >> printf( "%d %s",i, mlt_properties_get_name(affprop, i ) ); >> printf("\n"); >> } >> >> // if (mlt_properties_exists(mlt_filter_properties(aff), "background") > >> 0) { >> // printf("background exists\n"); >> // } >> int res = mlt_service_attach(mlt_producer_service(world), aff); >> >> >> // Connect the producer to the consumer >> mlt_consumer_connect( hello, mlt_producer_service( world ) ); >> >> // Start the consumer >> mlt_consumer_start( hello ); >> >> >> // Wait for the consumer to terminate >> while( !mlt_consumer_is_stopped( hello ) ) >> sleep( 1 ); >> >> // Close the consumer >> mlt_consumer_close( hello ); >> >> // Close the producer >> mlt_producer_close( world ); >> >> // Close the factory >> mlt_factory_close( ); >> } >> else >> { >> // Report an error during initialisation >> fprintf( stderr, "Unable to locate factory modules\n" ); >> } >> >> // End of program >> return 0; >> } >> >> With this example I get: >> $ gcc ex02.c -I/usr/include/mlt-7 -lmlt-7 -o ex02 >> $ ./ex02 example.mp4 >> 0 _events >> 1 mlt_type >> 2 in >> 3 out >> 4 background >> 5 _unique_id >> 6 mlt_service >> 7 _profile >> >> As I said, I cannot see neither "transition" nor "use_normalised". What >> do I need to do in C language to make them appear? >> > > I think I told you before that a property does not actually exist until > something sets it. Some filters only get a property and never set it. Also, > some properties such as "transition" is a pointer that cannot be > serialized. You do not need to set it; it is not published in the affine > filter's docs. > > This C works for me > > #include <stdio.h> > #include <unistd.h> > #include <framework/mlt.h> > > int main( int argc, char *argv[] ) > { > // Initialise the factory > if ( mlt_factory_init(NULL) > 0 ) > { > mlt_profile p = mlt_profile_init("hdv_720_50p"); > // Create the default consumer > mlt_consumer hello = mlt_factory_consumer( p, "sdl2", NULL ); > mlt_properties_set_int(mlt_consumer_properties(hello), > "terminate_on_pause", 1); > > // Create via the default producer > mlt_producer world = mlt_factory_producer( p, NULL, argv[ 1 ] ); > > // Create filter > mlt_filter aff = mlt_factory_filter( p, "affine", NULL ); > mlt_properties_set_int(MLT_FILTER_PROPERTIES(aff), > "transition.fix_rotate_x", 340); > > int res = mlt_service_attach(mlt_producer_service(world), aff); > > > // Connect the producer to the consumer > mlt_consumer_connect( hello, mlt_producer_service( world ) ); > > // Start the consumer > mlt_consumer_start( hello ); > > > // Wait for the consumer to terminate > while( !mlt_consumer_is_stopped( hello ) ) > sleep( 1 ); > > // Close the consumer > mlt_consumer_close( hello ); > > // Close the producer > mlt_producer_close( world ); > > // Close the factory > mlt_factory_close( ); > } > else > { > // Report an error during initialisation > fprintf( stderr, "Unable to locate factory modules\n" ); > } > > // End of program > return 0; > } > > > > >> >> Kind regards, >> José M. >> >> El vie, 31 dic 2021 a las 9:24, José María García Pérez (< >> josemaria.alk...@gmail.com>) escribió: >> >>> I think that my problem is that I am not handling properly nested >>> properties, but before that I don't see the keys a would expect for the >>> "affine" filter: >>> >>> When I print the keys for the affine filter, I get the following: >>> >>> _events >>> mlt_type >>> in >>> out >>> background >>> _unique_id >>> mlt_service >>> _profile >>> >>> I am not seeing neither "transition" nor "use_normalised" keys that I >>> would expect in accordance with >>> https://www.mltframework.org/plugins/FilterAffine/#transition. >>> >>> Any clue about what might be going on? >>> >>> >>> El jue, 30 dic 2021 a las 19:53, José María García Pérez (< >>> josemaria.alk...@gmail.com>) escribió: >>> >>>> I was expecting a rotated image. The output was the video unmodified. >>>> >>>> El jue, 30 dic 2021 a las 19:52, Brian Matherly (< >>>> brian.mathe...@yahoo.com>) escribió: >>>> >>>>> > My first attempt wasn't very successful >>>>> >>>>> What result did you expect, and what was the actual result? >>>>> >>>>> On Thursday, December 30, 2021, 12:28:42 PM CST, José María García >>>>> Pérez <josemaria.alk...@gmail.com> wrote: >>>>> >>>>> >>>>> I wasn't aware about Shotcut doing so. Good to know. >>>>> >>>>> My first attempt wasn't very successful. I did the following: >>>>> # nim c --threads:on -r ex23_loader_video >>>>> import mlt >>>>> import os >>>>> let f = initFactory("/usr/lib/mlt-7") >>>>> >>>>> # Create the consumer >>>>> let p = newProfile("hdv_720_50p") >>>>> var sdl = newFactoryConsumer(p, "sdl2") >>>>> >>>>> sdl["terminate_on_pause"] = 1 # Stop the consumer when finished >>>>> >>>>> # Create via the default producer >>>>> var clip1 = p.newMedia( "./resources/sygic.mp4") >>>>> >>>>> >>>>> var filter = newFactoryFilter(p, "affine") >>>>> filter["transition.fill"] = 1 >>>>> filter["transition.distort"] = 0 >>>>> filter["transition.rect"] = "339.703 126.468 1430.3 953.532 1" >>>>> filter["transition.valign"] = "middle" >>>>> filter["transition.halign"] = "center" >>>>> filter["transition.threads"] = 0 >>>>> filter["transition.fix_rotate_x"] = 340.0 >>>>> >>>>> #[ >>>>> <property name="background">color:#00000000</property> >>>>> <property name="mlt_service">affine</property> >>>>> <property name="shotcut:filter">affineSizePosition</property> >>>>> <property name="transition.fill">1</property> >>>>> <property name="transition.distort">0</property> >>>>> <property name="transition.rect">339.703 126.468 1430.3 953.532 >>>>> 1</property> >>>>> <property name="transition.valign">middle</property> >>>>> <property name="transition.halign">center</property> >>>>> <property name="shotcut:animIn">00:00:00.000</property> >>>>> <property name="shotcut:animOut">00:00:00.000</property> >>>>> <property name="transition.threads">0</property> >>>>> <property name="transition.fix_rotate_x">340.304</property> >>>>> >>>>> ]# >>>>> clip1.attach(filter) >>>>> clip1 > sdl >>>>> >>>>> sdl.start # Start the consumer >>>>> >>>>> while not sdl.stopped: >>>>> sleep(1) >>>>> >>>>> Do you spot something obvious that might be wrong? >>>>> >>>>> El jue, 30 dic 2021 a las 18:52, Dan Dennedy (<d...@dennedy.org>) >>>>> escribió: >>>>> >>>>> You can use a tool like Shotcut and study it’s XML output to >>>>> understand the properties for a filter. The affine filter is called Size, >>>>> Position & Rotate. To get the XML use File > Save. >>>>> >>>>> On Thu, Dec 30, 2021 at 9:47 AM José María García Pérez < >>>>> josemaria.alk...@gmail.com> wrote: >>>>> >>>>> I don't understand how to use the affine filter: >>>>> https://www.mltframework.org/plugins/FilterAffine/#transition >>>>> >>>>> Could you post a basic C example using it? It would be nice to cover >>>>> both the static and an animation case. >>>>> >>>>> I had the following example about using a filter using Nim: >>>>> 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.attach( filter ) >>>>> clip > sdl >>>>> >>>>> # Start the consumer >>>>> sdl.start >>>>> >>>>> while not sdl.stopped: >>>>> sleep(1) >>>>> _______________________________________________ >>>>> Mlt-devel mailing list >>>>> Mlt-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/mlt-devel >>>>> >>>>> _______________________________________________ >>>>> Mlt-devel mailing list >>>>> Mlt-devel@lists.sourceforge.net >>>>> https://lists.sourceforge.net/lists/listinfo/mlt-devel >>>>> >>>>
_______________________________________________ Mlt-devel mailing list Mlt-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/mlt-devel