dest++;
*dest = sample_mix( *dest, *src++, mix );
dest++;
- *alpha_a = mix | *alpha_a;
+ *alpha_a = ( mix >> 8 ) | *alpha_a;
alpha_a ++;
}
}
dest++;
*dest = sample_mix( *dest, *src++, mix );
dest++;
- *alpha_a ++ = mix;
+ *alpha_a ++ = mix >> 8;
}
}
dest++;
*dest = sample_mix( *dest, *src++, mix );
dest++;
- *alpha_a ++ = mix;
+ *alpha_a ++ = mix >> 8;
}
}
dest++;
*dest = sample_mix( *dest, *src++, mix );
dest++;
- *alpha_a ++ = mix;
+ *alpha_a ++ = mix >> 8;
}
}
// Get the properties objects
mlt_properties b_props = MLT_FRAME_PROPERTIES( b_frame );
mlt_properties properties = MLT_TRANSITION_PROPERTIES( this );
+ uint8_t resize_alpha = mlt_properties_get_int( b_props, "resize_alpha" );
- if ( mlt_properties_get_int( properties, "distort" ) == 0 && mlt_properties_get_int( b_props, "distort" ) == 0 && geometry->item.distort == 0 )
+ if ( mlt_properties_get_int( properties, "aligned" ) && mlt_properties_get_int( properties, "distort" ) == 0 && mlt_properties_get_int( b_props, "distort" ) == 0 && geometry->item.distort == 0 )
{
// Adjust b_frame pixel aspect
int normalised_width = geometry->item.w;
// ????: Shouln't this be the default behaviour?
if ( mlt_properties_get_int( properties, "fill" ) && scaled_width > 0 && scaled_height > 0 )
{
- if ( scaled_height < normalised_height && scaled_width * normalised_height / scaled_height < normalised_width )
+ if ( scaled_height < normalised_height && scaled_width * normalised_height / scaled_height <= normalised_width )
{
scaled_width = rint( 0.5 + scaled_width * normalised_height / scaled_height );
scaled_height = normalised_height;
}
// We want to ensure that we bypass resize now...
- mlt_properties_set_int( b_props, "distort", mlt_properties_get_int( properties, "distort" ) );
+ if ( resize_alpha == 0 )
+ mlt_properties_set_int( b_props, "distort", mlt_properties_get_int( properties, "distort" ) );
+
+ // If we're not aligned, we want a non-transparent background
+ if ( mlt_properties_get_int( properties, "aligned" ) == 0 )
+ mlt_properties_set_int( b_props, "resize_alpha", 255 );
// Take into consideration alignment for optimisation (titles are a special case)
if ( !mlt_properties_get_int( properties, "titles" ) )
ret = mlt_frame_get_image( b_frame, image, &format, width, height, 1 );
+ // Set the frame back
+ mlt_properties_set_int( b_props, "resize_alpha", resize_alpha );
+
return ret && image != NULL;
}
// Default factory
mlt_properties_set( properties, "factory", "fezzik" );
+ // Use alignment (and hence alpha of b frame)
+ mlt_properties_set_int( properties, "aligned", 1 );
+
// Inform apps and framework that this is a video only transition
mlt_properties_set_int( properties, "_transition_type", 1 );
}