I have tried without success the following aproaches:
First attempt:
1. Creating an Affine transform:
https://mltframework.org/plugins/TransitionAffine/
2. Setting a new filter property named "transition" with the content of
transition properties (I modify before hand the rotation value:
var aff = newFactoryFilter(p, "affine")
var transition = newFactoryTransition(p, "affine")
transition["fix_rotate_x"] = 100.0
aff.setProperties("transition", transition)

Other approach that I tried was:
1. creating some custom properties
2. setting that properties
var aff = newFactoryFilter(p, "affine")
var ap:Properties
ap.data = mlt_properties_new()
ap.set("fix_rotate_x", 100.0)
aff.setProperties("transition", ap)

Other approach:
1. Setting the property as follows
var aff = newFactoryFilter(p, "affine")
aff["transition.fix_rotate_x"] = 100.0

Could you modify the C language example that I posted to turn the image a
number of degrees so that I can reproduce the approach in Nim?



El sáb, 1 ene 2022 a las 17:43, Brian Matherly (<brian.mathe...@yahoo.com>)
escribió:

> The affine filter does not set any of the "transition.*" or
> "use_normalized" properties when it is initialized. You need to set them
> yourself:
>
> https://github.com/mltframework/mlt/blob/master/src/modules/plus/filter_affine.c#L157
>
> In the absence of setting the "transition.*" properties, the encapsulated
> affine transition will use its own default parameters. But those are not
> reflected by the affine filter automatically:
>
> https://github.com/mltframework/mlt/blob/master/src/modules/plus/transition_affine.c#L694
>
> In the absence of setting the "use_normalized" property, the properties
> object will return "0" (false):
>
> https://github.com/mltframework/mlt/blob/9c3bb7d997a78fed3142c2ef95988623d21dce15/src/modules/plus/filter_affine.c#L98
>
> ~Brian
>
>
>
> On Saturday, January 1, 2022, 10:10:25 AM CST, 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:
> // $ 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?
>
> 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

Reply via email to