]> git.sesse.net Git - mlt/commitdiff
filter_luma.c: prevent the first application of the nested luma transition from being...
authorddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Sat, 27 Dec 2008 05:53:38 +0000 (05:53 +0000)
committerddennedy <ddennedy@d19143bc-622f-0410-bfdd-b5b2a6649095>
Sat, 27 Dec 2008 05:53:38 +0000 (05:53 +0000)
git-svn-id: https://mlt.svn.sourceforge.net/svnroot/mlt/trunk/mlt@1291 d19143bc-622f-0410-bfdd-b5b2a6649095

src/modules/core/filter_luma.c

index f2e11567097ea915aff94c5f2a260b5c0e93eadf..f05d6c405d06502080116b73c9ac9374db690052 100644 (file)
@@ -44,6 +44,12 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
        if ( out == 0 )
                out = 24;
 
+       if ( b_frame == NULL || mlt_properties_get_int( b_frame_props, "width" ) != *width || mlt_properties_get_int( b_frame_props, "height" ) != *height )
+       {
+               b_frame = mlt_frame_init( MLT_FILTER_SERVICE( filter ) );
+               mlt_properties_set_data( properties, "frame", b_frame, 0, ( mlt_destructor )mlt_frame_close, NULL );
+       }
+
        if ( luma == NULL )
        {
                char *resource = mlt_properties_get( properties, "resource" );
@@ -57,12 +63,27 @@ static int filter_get_image( mlt_frame this, uint8_t **image, mlt_image_format *
                        mlt_properties_set_int( luma_properties, "reverse", 1 );
                        mlt_properties_set_data( properties, "luma", luma, 0, ( mlt_destructor )mlt_transition_close, NULL );
                }
-       }
 
-       if ( b_frame == NULL || mlt_properties_get_int( b_frame_props, "width" ) != *width || mlt_properties_get_int( b_frame_props, "height" ) != *height )
-       {
-               b_frame = mlt_frame_init( MLT_FILTER_SERVICE( filter ) );
-               mlt_properties_set_data( properties, "frame", b_frame, 0, ( mlt_destructor )mlt_frame_close, NULL );
+               // Prime the filter with the first image to prevent a transition from the white
+               // of a test card.
+               error = mlt_frame_get_image( this, image, format, width, height, 1 );
+               if ( error == 0 )
+               {
+                       mlt_properties a_props = MLT_FRAME_PROPERTIES( this );
+                       int size = 0;
+                       uint8_t *src = mlt_properties_get_data( a_props, "image", &size );
+                       uint8_t *dst = mlt_pool_alloc( size );
+       
+                       if ( dst != NULL )
+                       {
+                               mlt_properties b_props = MLT_FRAME_PROPERTIES( b_frame );
+                               memcpy( dst, src, size );
+                               mlt_properties_set_data( b_props, "image", dst, size, mlt_pool_release, NULL );
+                               mlt_properties_set_int( b_props, "width", *width );
+                               mlt_properties_set_int( b_props, "height", *height );
+                               mlt_properties_set_int( b_props, "format", *format );
+                       }
+               }
        }
 
        if ( luma != NULL &&