sdl hacks
[melted] / src / framework / mlt_consumer.c
index 92a95fe..0b1eee5 100644 (file)
@@ -42,7 +42,7 @@ int mlt_consumer_init( mlt_consumer this, void *child )
                mlt_properties properties = mlt_service_properties( &this->parent );
 
                // Get the normalisation preference
-               char *normalisation = getenv( "MLT_NORMALISATION" );
+               char *normalisation = mlt_environment( "MLT_NORMALISATION" );
 
                // Deal with normalisation
                if ( normalisation == NULL || strcmp( normalisation, "NTSC" ) )
@@ -107,15 +107,25 @@ int mlt_consumer_start( mlt_consumer this )
        // Deal with it now.
        if ( test_card != NULL )
        {
-               // Create a test card producer
-               // TODO: do we want to use fezzik here?
-               mlt_producer producer = mlt_factory_producer( "fezzik", test_card );
-
-               // Do we have a producer
-               if ( producer != NULL )
+               if ( mlt_properties_get_data( properties, "test_card_producer", NULL ) == NULL )
                {
-                       // Set the test card on the consumer
-                       mlt_properties_set_data( properties, "test_card_producer", producer, 0, ( mlt_destructor )mlt_producer_close, NULL );
+                       // Create a test card producer
+                       // TODO: do we want to use fezzik here?
+                       mlt_producer producer = mlt_factory_producer( "fezzik", test_card );
+
+                       // Do we have a producer
+                       if ( producer != NULL )
+                       {
+                               // Test card should loop I guess...
+                               mlt_properties_set( mlt_producer_properties( producer ), "eof", "loop" );
+
+                               // Set the test card on the consumer
+                               mlt_properties_set_data( properties, "test_card_producer", producer, 0, ( mlt_destructor )mlt_producer_close, NULL );
+                       }
+
+                       // Check and run an ante command
+                       if ( mlt_properties_get( properties, "ante" ) )
+                               system( mlt_properties_get( properties, "ante" ) );
                }
        }
 
@@ -154,8 +164,10 @@ mlt_frame mlt_consumer_get_frame( mlt_consumer this )
                if ( mlt_properties_get( properties, "rescale" ) != NULL )
                        mlt_properties_set( frame_properties, "rescale.interp", mlt_properties_get( properties, "rescale" ) );
 
-               // TODO: Aspect ratio and other jiggery pokery
+               // Aspect ratio and other jiggery pokery
                mlt_properties_set_double( frame_properties, "consumer_aspect_ratio", mlt_properties_get_double( properties, "aspect_ratio" ) );
+               mlt_properties_set_int( frame_properties, "consumer_progressive", mlt_properties_get_int( properties, "progressive" ) );
+               mlt_properties_set_int( frame_properties, "consumer_deinterlace", mlt_properties_get_int( properties, "deinterlace" ) );
                
        }
 
@@ -173,11 +185,15 @@ int mlt_consumer_stop( mlt_consumer this )
 
        // Stop the consumer
        if ( this->stop != NULL )
-               return this->stop( this );
+               this->stop( this );
 
        // Kill the test card
        mlt_properties_set_data( properties, "test_card_producer", NULL, 0, NULL, NULL );
 
+       // Check and run a post command
+       if ( mlt_properties_get( properties, "post" ) )
+               system( mlt_properties_get( properties, "post" ) );
+
        return 0;
 }
 
@@ -186,7 +202,7 @@ int mlt_consumer_stop( mlt_consumer this )
 
 int mlt_consumer_is_stopped( mlt_consumer this )
 {
-       // Stop the consumer
+       // Check if the consumer is stopped
        if ( this->is_stopped != NULL )
                return this->is_stopped( this );