X-Git-Url: http://research.m1stereo.tv/gitweb?a=blobdiff_plain;f=src%2Fframework%2Fmlt_producer.c;h=74441f94a8d4a03cd8d1c976a3a1e3efa1e8be15;hb=bea649aa7c6f4f4c57b67678be7dfe74d4db66b3;hp=63a443fffa99a0fcb4f0a7f3828ad9e29ad299a3;hpb=2a800ec4c840132c7a629b764b673dce09771637;p=melted diff --git a/src/framework/mlt_producer.c b/src/framework/mlt_producer.c index 63a443f..74441f9 100644 --- a/src/framework/mlt_producer.c +++ b/src/framework/mlt_producer.c @@ -90,6 +90,16 @@ int mlt_producer_init( mlt_producer this, void *child ) return error; } +/** Create a new producer. +*/ + +mlt_producer mlt_producer_new( ) +{ + mlt_producer this = malloc( sizeof( struct mlt_producer_s ) ); + mlt_producer_init( this, NULL ); + return this; +} + /** Get the parent service object. */ @@ -113,18 +123,19 @@ int mlt_producer_seek( mlt_producer this, mlt_position position ) { // Determine eof handling char *eof = mlt_properties_get( mlt_producer_properties( this ), "eof" ); + int use_points = 1 - mlt_properties_get_int( mlt_producer_properties( this ), "ignore_points" ); // Check bounds if ( position < 0 ) { position = 0; } - else if ( !strcmp( eof, "pause" ) && position >= mlt_producer_get_playtime( this ) ) + else if ( use_points && !strcmp( eof, "pause" ) && position >= mlt_producer_get_playtime( this ) ) { mlt_producer_set_speed( this, 0 ); position = mlt_producer_get_playtime( this ) - 1; } - else if ( !strcmp( eof, "loop" ) && position >= mlt_producer_get_playtime( this ) ) + else if ( use_points && !strcmp( eof, "loop" ) && position >= mlt_producer_get_playtime( this ) ) { position = position % mlt_producer_get_playtime( this ); } @@ -133,7 +144,7 @@ int mlt_producer_seek( mlt_producer this, mlt_position position ) mlt_properties_set_position( mlt_producer_properties( this ), "_position", position ); // Calculate the absolute frame - mlt_properties_set_position( mlt_producer_properties( this ), "_frame", mlt_producer_get_in( this ) + position ); + mlt_properties_set_position( mlt_producer_properties( this ), "_frame", use_points * mlt_producer_get_in( this ) + position ); return 0; }