Thread: [Mlt-devel] slow playback and producer_slowmotion
Brought to you by:
ddennedy,
lilo_booter
From: Maksym V. <ve...@m1...> - 2013-05-13 18:04:05
|
Hi, could anybody give me advice on how to play with speed 0.1 ... 0.9 or another non-integer speed value. mlt_types.h has very interesting lines code: [...] /* I don't want to break anyone's applications without warning. -Zach */ #undef DOUBLE_MLT_POSITION #ifdef DOUBLE_MLT_POSITION typedef double mlt_position; #else typedef int32_t mlt_position; #endif [...] that define to use integer type for position, so any float speed values would be truncated to int value: void mlt_producer_prepare_next( mlt_producer self ) { if ( mlt_producer_get_speed( self ) != 0 ) mlt_producer_seek( self, mlt_producer_position( self ) + mlt_producer_get_speed( self ) ); } so first possible approach would be define DOUBLE_MLT_POSITION, but could it break MLT? i found producer_slowmotion that sounds like proper solution but i have no glue how to use it. Could anybody give me a code sample that show how to use playlist and slowmotion producer? -- ________________________________________ Maksym Veremeyenko |
From: Dan D. <da...@de...> - 2013-05-13 18:21:30
|
On Mon, May 13, 2013 at 9:58 AM, Maksym Veremeyenko <ve...@m1...> wrote: > Hi, > > could anybody give me advice on how to play with speed 0.1 ... 0.9 or > another non-integer speed value. > > mlt_types.h has very interesting lines code: > [...] > /* I don't want to break anyone's applications without warning. -Zach */ > #undef DOUBLE_MLT_POSITION > #ifdef DOUBLE_MLT_POSITION > typedef double mlt_position; > #else > typedef int32_t mlt_position; > #endif > [...] > > that define to use integer type for position, so any float speed values > would be truncated to int value: > > void mlt_producer_prepare_next( mlt_producer self ) > { > if ( mlt_producer_get_speed( self ) != 0 ) > mlt_producer_seek( self, mlt_producer_position( self ) + > mlt_producer_get_speed( self ) ); > } > > so first possible approach would be define DOUBLE_MLT_POSITION, but > could it break MLT? Yes, it is an interesting unused code that I should probably remove. It quite likely will break all sorts of things; it is certainly not as simple a switch as it appears. :-) You are completely on your own should you choose to use it as I know nothing about it. Of course, you can go all in and get something working here and feel free to share your fork for review and merge. > i found producer_slowmotion that sounds like proper solution but i have > no glue how to use it. Could anybody give me a code sample that show how > to use playlist and slowmotion producer? > And that producer is basically useless as well because the resulting image quality is so poor. It attempted to use macroblock motion estimation to do fast frame interpolation. If you just want to repeat or drop frames, then take a look at the framebuffer producer (as used by kdenlive's speed effect). Please be aware that this does not convey the encapsulated producer's audio. framebuffer:some.mp4?0.5 speed < 0 : reverse 0 < abs(speed) < 1.0 : slow 1.0 < abs(speed) : fast -- +-DRD-+ |
From: Maksym V. <ve...@m1...> - 2013-05-15 08:30:40
Attachments:
0001-make-mlt_position-type-double.patch
|
13.05.13 21:21, Dan Dennedy написав(ла): > On Mon, May 13, 2013 at 9:58 AM, Maksym Veremeyenko<ve...@m1...> wrote: >> Hi, >> >> could anybody give me advice on how to play with speed 0.1 ... 0.9 or >> another non-integer speed value. >> >> mlt_types.h has very interesting lines code: >> [...] >> /* I don't want to break anyone's applications without warning. -Zach */ >> #undef DOUBLE_MLT_POSITION >> #ifdef DOUBLE_MLT_POSITION >> typedef double mlt_position; >> #else >> typedef int32_t mlt_position; >> #endif >> [...] >> >> that define to use integer type for position, so any float speed values >> would be truncated to int value: >> >> void mlt_producer_prepare_next( mlt_producer self ) >> { >> if ( mlt_producer_get_speed( self ) != 0 ) >> mlt_producer_seek( self, mlt_producer_position( self ) + >> mlt_producer_get_speed( self ) ); >> } >> >> so first possible approach would be define DOUBLE_MLT_POSITION, but >> could it break MLT? > > Yes, it is an interesting unused code that I should probably remove. > It quite likely will break all sorts of things; it is certainly not as > simple a switch as it appears. :-) You are completely on your own > should you choose to use it as I know nothing about it. Of course, you > can go all in and get something working here and feel free to share > your fork for review and merge. > i did a change to make mlt_position type double (patch attached) and it seems it working fine for me currently. at least it playback clips and speed could be changed from [0..1] range easy. i will try to do more tests next day. i think it would be usefull to add an option to configure for controlling macro DOUBLE_MLT_POSITION definition. >> i found producer_slowmotion that sounds like proper solution but i have >> no glue how to use it. Could anybody give me a code sample that show how >> to use playlist and slowmotion producer? >> > > And that producer is basically useless as well because the resulting > image quality is so poor. It attempted to use macroblock motion > estimation to do fast frame interpolation. If you just want to repeat > or drop frames, then take a look at the framebuffer producer (as used > by kdenlive's speed effect). Please be aware that this does not convey > the encapsulated producer's audio. > > framebuffer:some.mp4?0.5 > speed< 0 : reverse > 0< abs(speed)< 1.0 : slow > 1.0< abs(speed) : fast could you give a hint on how to use playlist producer and framebuffer producer with C-code? -- ________________________________________ Maksym Veremeyenko |
From: Dan D. <da...@de...> - 2013-05-15 17:03:22
|
On Wed, May 15, 2013 at 1:30 AM, Maksym Veremeyenko <ve...@m1...> wrote: > > 13.05.13 21:21, Dan Dennedy написав(ла): > >> On Mon, May 13, 2013 at 9:58 AM, Maksym Veremeyenko<ve...@m1...> wrote: >>> >>> Hi, >>> >>> could anybody give me advice on how to play with speed 0.1 ... 0.9 or >>> another non-integer speed value. >>> >>> mlt_types.h has very interesting lines code: >>> [...] >>> /* I don't want to break anyone's applications without warning. -Zach */ >>> #undef DOUBLE_MLT_POSITION >>> #ifdef DOUBLE_MLT_POSITION >>> typedef double mlt_position; >>> #else >>> typedef int32_t mlt_position; >>> #endif >>> [...] >>> >>> that define to use integer type for position, so any float speed values >>> would be truncated to int value: >>> >>> void mlt_producer_prepare_next( mlt_producer self ) >>> { >>> if ( mlt_producer_get_speed( self ) != 0 ) >>> mlt_producer_seek( self, mlt_producer_position( self ) + >>> mlt_producer_get_speed( self ) ); >>> } >>> >>> so first possible approach would be define DOUBLE_MLT_POSITION, but >>> could it break MLT? >> >> >> Yes, it is an interesting unused code that I should probably remove. >> It quite likely will break all sorts of things; it is certainly not as >> simple a switch as it appears. :-) You are completely on your own >> should you choose to use it as I know nothing about it. Of course, you >> can go all in and get something working here and feel free to share >> your fork for review and merge. >> > i did a change to make mlt_position type double (patch attached) and it seems it working fine for me currently. at least it playback clips and speed could be changed from [0..1] range easy. > > i will try to do more tests next day. > > i think it would be usefull to add an option to configure for controlling macro DOUBLE_MLT_POSITION definition. Not until it has been tested by Kdenlive and Flowblade or until a comprehensive test suite is made. Until then, it must remain something you manually enable in CFLAGS. > > >>> i found producer_slowmotion that sounds like proper solution but i have >>> no glue how to use it. Could anybody give me a code sample that show how >>> to use playlist and slowmotion producer? >>> >> >> And that producer is basically useless as well because the resulting >> image quality is so poor. It attempted to use macroblock motion >> estimation to do fast frame interpolation. If you just want to repeat >> or drop frames, then take a look at the framebuffer producer (as used >> by kdenlive's speed effect). Please be aware that this does not convey >> the encapsulated producer's audio. >> >> framebuffer:some.mp4?0.5 >> speed< 0 : reverse >> 0< abs(speed)< 1.0 : slow >> 1.0< abs(speed) : fast > > could you give a hint on how to use playlist producer and framebuffer producer with C-code? > I do not think it is possible as it is written today. However, you might be able to save the playlist as XML using the xml consumer, and then load that XML file with the framebuffer producer. -- +-DRD-+ |
From: Dan D. <da...@de...> - 2013-05-25 19:58:10
|
I have merged your patch into my repo. Thank you! On Wed, May 15, 2013 at 1:30 AM, Maksym Veremeyenko <ve...@m1...> wrote: > 13.05.13 21:21, Dan Dennedy написав(ла): > >> On Mon, May 13, 2013 at 9:58 AM, Maksym Veremeyenko<ve...@m1...> >> wrote: >>> >>> Hi, >>> >>> could anybody give me advice on how to play with speed 0.1 ... 0.9 or >>> another non-integer speed value. >>> >>> mlt_types.h has very interesting lines code: >>> [...] >>> /* I don't want to break anyone's applications without warning. -Zach */ >>> #undef DOUBLE_MLT_POSITION >>> #ifdef DOUBLE_MLT_POSITION >>> typedef double mlt_position; >>> #else >>> typedef int32_t mlt_position; >>> #endif >>> [...] >>> >>> that define to use integer type for position, so any float speed values >>> would be truncated to int value: >>> >>> void mlt_producer_prepare_next( mlt_producer self ) >>> { >>> if ( mlt_producer_get_speed( self ) != 0 ) >>> mlt_producer_seek( self, mlt_producer_position( self ) + >>> mlt_producer_get_speed( self ) ); >>> } >>> >>> so first possible approach would be define DOUBLE_MLT_POSITION, but >>> could it break MLT? >> >> >> Yes, it is an interesting unused code that I should probably remove. >> It quite likely will break all sorts of things; it is certainly not as >> simple a switch as it appears. :-) You are completely on your own >> should you choose to use it as I know nothing about it. Of course, you >> can go all in and get something working here and feel free to share >> your fork for review and merge. >> > i did a change to make mlt_position type double (patch attached) and it > seems it working fine for me currently. at least it playback clips and speed > could be changed from [0..1] range easy. > > i will try to do more tests next day. > > i think it would be usefull to add an option to configure for controlling > macro DOUBLE_MLT_POSITION definition. > > >>> i found producer_slowmotion that sounds like proper solution but i have >>> no glue how to use it. Could anybody give me a code sample that show how >>> to use playlist and slowmotion producer? >>> >> >> And that producer is basically useless as well because the resulting >> image quality is so poor. It attempted to use macroblock motion >> estimation to do fast frame interpolation. If you just want to repeat >> or drop frames, then take a look at the framebuffer producer (as used >> by kdenlive's speed effect). Please be aware that this does not convey >> the encapsulated producer's audio. >> >> framebuffer:some.mp4?0.5 >> speed< 0 : reverse >> 0< abs(speed)< 1.0 : slow >> 1.0< abs(speed) : fast > > could you give a hint on how to use playlist producer and framebuffer > producer with C-code? > > > -- > ________________________________________ > Maksym Veremeyenko -- +-DRD-+ |