* Copyright (C) 2003-2004 Ushodaya Enterprises Limited
* Author: Dan Dennedy <dan@dennedy.org>
*
- * This program is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
+ * This library is free software; you can redistribute it and/or
+ * modify it under the terms of the GNU Lesser General Public
+ * License as published by the Free Software Foundation; either
+ * version 2.1 of the License, or (at your option) any later version.
*
- * This program is distributed in the hope that it will be useful,
+ * This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
+ * Lesser General Public License for more details.
*
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software Foundation,
- * Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
+ * You should have received a copy of the GNU Lesser General Public
+ * License along with this library; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
#include "transition_composite.h"
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 );
}