some temporary fixes
[melted] / mlt / src / modules / core / transition_luma.c
index fa6d7c3..fc712ea 100644 (file)
@@ -34,7 +34,7 @@ typedef struct
        struct mlt_transition_s parent;
        char *filename;
        int width;
-       int height;
+       int height;                                                     
        double *bitmap;
 }
 transition_luma;
@@ -313,7 +313,7 @@ static mlt_frame transition_process( mlt_transition transition, mlt_frame a_fram
 
        // If the filename property changed, reload the map
        char *luma_file = mlt_properties_get( properties, "filename" );
-       if ( luma_file != NULL && luma_file != this->filename )
+       if ( luma_file != NULL && ( this->filename == NULL || ( this->filename && strcmp( luma_file, this->filename ) ) ) )
        {
                int width = mlt_properties_get_int( b_props, "width" );
                int height = mlt_properties_get_int( b_props, "height" );
@@ -321,12 +321,16 @@ static mlt_frame transition_process( mlt_transition transition, mlt_frame a_fram
                FILE *pipe;
                
                command[ 511 ] = '\0';
-               this->filename = luma_file;
+               if ( this->filename )
+                       free( this->filename );
+               this->filename = strdup( luma_file );
                snprintf( command, 511, "anytopnm %s | pnmscale -width %d -height %d", luma_file, width, height );
                //pipe = popen( command, "r" );
                pipe = fopen( luma_file, "r" );
                if ( pipe != NULL )
                {
+                       if ( this->bitmap )
+                               free( this->bitmap );
                        luma_read_pgm( pipe, &this->bitmap, &this->width, &this->height );
                        //pclose( pipe );
                        fclose( pipe );
@@ -335,10 +339,10 @@ static mlt_frame transition_process( mlt_transition transition, mlt_frame a_fram
        }
 
        // Determine the time position of this frame in the transition duration
-       mlt_timecode in = mlt_transition_get_in( transition );
-       mlt_timecode out = mlt_transition_get_out( transition );
-       mlt_timecode time = mlt_frame_get_timecode( b_frame );
-       double pos = ( time - in ) / ( out - in );
+       mlt_position in = mlt_transition_get_in( transition );
+       mlt_position out = mlt_transition_get_out( transition );
+       mlt_position time = mlt_frame_get_position( b_frame );
+       double pos = ( (double)time - (double)in ) / ( (double)out - (double)in + 1 );
        
        // Set the b frame properties
        mlt_properties_set_double( b_props, "mix", pos );
@@ -352,12 +356,13 @@ static mlt_frame transition_process( mlt_transition transition, mlt_frame a_fram
        mlt_frame_push_frame( a_frame, b_frame );
 
 /************************ AUDIO ***************************/
+#if 1
        // Backup the original get_audio (it's still needed)
        mlt_properties_set_data( mlt_frame_properties( a_frame ), "get_audio", a_frame->get_audio, 0, NULL, NULL );
 
        // Override the get_audio method
        a_frame->get_audio = transition_get_audio;
-
+#endif
        return a_frame;
 }
 
@@ -392,8 +397,9 @@ static void transition_close( mlt_transition parent )
        if ( this->bitmap )
                free( this->bitmap );
        
-       parent->close = NULL;
-       mlt_transition_close( parent );
+       if ( this->filename )
+               free( this->filename );
+
        free( this );
 }