From d9d6bcb194da2fd2976cca2a4492a9ba2df8454a Mon Sep 17 00:00:00 2001 From: Dan Dennedy Date: Mon, 5 Nov 2012 20:51:46 -0800 Subject: [PATCH] qimage: let begin property be passed as a query string parameter --- src/modules/qimage/producer_qimage.c | 34 ++++++++++++++++++++++---- src/modules/qimage/producer_qimage.yml | 8 +++--- 2 files changed, 34 insertions(+), 8 deletions(-) diff --git a/src/modules/qimage/producer_qimage.c b/src/modules/qimage/producer_qimage.c index e9a9a716..98d6f472 100644 --- a/src/modules/qimage/producer_qimage.c +++ b/src/modules/qimage/producer_qimage.c @@ -102,7 +102,7 @@ static int load_svg( producer_qimage self, mlt_properties properties, const char return result; } -static int load_sequence( producer_qimage self, mlt_properties properties, const char *filename ) +static int load_sequence_sprintf( producer_qimage self, mlt_properties properties, const char *filename ) { int result = 0; @@ -140,7 +140,7 @@ static int load_sequence( producer_qimage self, mlt_properties properties, const return result; } -static int load_sequence2( producer_qimage self, mlt_properties properties, const char *filename ) +static int load_sequence_deprecated( producer_qimage self, mlt_properties properties, const char *filename ) { int result = 0; const char *start; @@ -160,13 +160,36 @@ static int load_sequence2( producer_qimage self, mlt_properties properties, cons s = calloc( 1, strlen( filename ) ); strncpy( s, filename, start - filename ); sprintf( s + ( start - filename ), ".%d%s", n, end ); - result = load_sequence( self, properties, s ); + result = load_sequence_sprintf( self, properties, s ); free( s ); } } return result; } +static int load_sequence_querystring( producer_qimage self, mlt_properties properties, const char *filename ) +{ + int result = 0; + + // Obtain filenames with pattern and begin value in query string + if ( strchr( filename, '%' ) && strchr( filename, '?' ) ) + { + // Split filename into pattern and query string + char *s = strdup( filename ); + char *querystring = strrchr( s, '?' ); + *querystring++ = '\0'; + if ( strstr( filename, "begin=" ) ) + mlt_properties_set( properties, "begin", strstr( querystring, "begin=" ) + 6 ); + else if ( strstr( filename, "begin:" ) ) + mlt_properties_set( properties, "begin", strstr( querystring, "begin:" ) + 6 ); + // Coerce to an int value so serialization does not have any extra query string cruft + mlt_properties_set_int( properties, "begin", mlt_properties_get_int( properties, "begin" ) ); + result = load_sequence_sprintf( self, properties, s ); + free( s ); + } + return result; +} + static int load_folder( producer_qimage self, mlt_properties properties, const char *filename ) { int result = 0; @@ -195,8 +218,9 @@ static void load_filenames( producer_qimage self, mlt_properties properties ) self->filenames = mlt_properties_new( ); if (!load_svg( self, properties, filename ) && - !load_sequence( self, properties, filename ) && - !load_sequence2( self, properties, filename ) && + !load_sequence_querystring( self, properties, filename ) && + !load_sequence_sprintf( self, properties, filename ) && + !load_sequence_deprecated( self, properties, filename ) && !load_folder( self, properties, filename ) ) { mlt_properties_set( self->filenames, "0", filename ); diff --git a/src/modules/qimage/producer_qimage.yml b/src/modules/qimage/producer_qimage.yml index f496b41c..eaf20b27 100644 --- a/src/modules/qimage/producer_qimage.yml +++ b/src/modules/qimage/producer_qimage.yml @@ -25,9 +25,11 @@ parameters: If "%" in filename, the filename is used with sprintf to generate a filename from a counter for multi-file/flipbook animation. The file - sequence ends when numeric discontinuity >100. If the file sequence - does not begin with the count of 100, you can also embed the number - of the first image between the "%" and a "d", "i", or "u". + sequence ends when numeric discontinuity exceeds 100. + + If the file sequence does not begin within the count of 100 you + can pass the begin property like a query string parameter, for + example: anim-%04d.png?begin=1000. If filename contains "/.all.", suffix with an extension to load all pictures with matching extension from a directory. -- 2.39.2