Instead of passing an int cast as pointer.
// Test to see if swscale accepts the arg as resolution
if ( arg )
{
- int width = (int) arg;
- struct SwsContext *context = sws_getContext( width, width, PIX_FMT_RGB32, 64, 64, PIX_FMT_RGB32, SWS_BILINEAR, NULL, NULL, NULL);
- if ( context )
- sws_freeContext( context );
- else
- return NULL;
- }
+ int *width = (int*) arg;
+ if ( *width > 0 )
+ {
+ struct SwsContext *context = sws_getContext( *width, *width, PIX_FMT_RGB32, 64, 64, PIX_FMT_RGB32, SWS_BILINEAR, NULL, NULL, NULL);
+ if ( context )
+ sws_freeContext( context );
+ else
+ return NULL;
+ }
+ }
#else
return NULL;
#endif
if ( arg != NULL )
*arg ++ = '\0';
- // The swscale and avcolor_space filters require resolution as arg to test compatibility
- if ( strncmp( effect, "swscale", 7 ) == 0 || strncmp( effect, "avcolo", 6 ) == 0 )
- arg = (char*) mlt_properties_get_int( MLT_SERVICE_PROPERTIES( service ), "meta.media.width" );
-
// We cannot use GLSL-based filters here.
if ( strncmp( effect, "movit.", 6 ) && strncmp( effect, "glsl.", 5 ) )
{
- mlt_filter filter = mlt_factory_filter( profile, id, arg );
- if ( filter != NULL )
+ mlt_filter filter;
+ // The swscale and avcolor_space filters require resolution as arg to test compatibility
+ if ( strncmp( effect, "swscale", 7 ) == 0 || strncmp( effect, "avcolo", 6 ) == 0 )
+ {
+ int width = mlt_properties_get_int( MLT_SERVICE_PROPERTIES( service ), "meta.media.width" );
+ filter = mlt_factory_filter( profile, id, &width );
+ }
+ else
+ {
+ filter = mlt_factory_filter( profile, id, arg );
+ }
+ if ( filter )
{
mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "_loader", 1 );
mlt_service_attach( service, filter );
static void create_filter( mlt_profile profile, mlt_producer producer, char *effect, int *created )
{
+ mlt_filter filter;
char *id = strdup( effect );
char *arg = strchr( id, ':' );
if ( arg != NULL )
// The swscale and avcolor_space filters require resolution as arg to test compatibility
if ( strncmp( effect, "swscale", 7 ) == 0 || strncmp( effect, "avcolo", 6 ) == 0 )
- arg = (char*) mlt_properties_get_int( MLT_PRODUCER_PROPERTIES( producer ), "meta.media.width" );
-
- mlt_filter filter = mlt_factory_filter( profile, id, arg );
- if ( filter != NULL )
+ {
+ int width = mlt_properties_get_int( MLT_PRODUCER_PROPERTIES( producer ), "meta.media.width" );
+ filter = mlt_factory_filter( profile, id, &width );
+ }
+ else
+ {
+ filter = mlt_factory_filter( profile, id, arg );
+ }
+ if ( filter )
{
mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "_loader", 1 );
mlt_producer_attach( producer, filter );
static mlt_filter create_filter( mlt_profile profile, char *effect )
{
- mlt_filter filter = NULL;
+ mlt_filter filter;
char *id = strdup( effect );
char *arg = strchr( id, ':' );
if ( arg != NULL )
// The swscale and avcolor_space filters require resolution as arg to test compatibility
if ( !strcmp( effect, "avcolor_space" ) )
- arg = (char*) profile->width;
-
- filter = mlt_factory_filter( profile, id, arg );
+ filter = mlt_factory_filter( profile, id, &profile->width );
+ else
+ filter = mlt_factory_filter( profile, id, arg );
if ( filter )
mlt_properties_set_int( MLT_FILTER_PROPERTIES( filter ), "_loader", 1 );
free( id );