// Producers may start with blank footage, by default we will skip, oh, 5 frames unless overridden
int skip = mlt_properties_get_int( properties, "skip");
+ mlt_service_lock( MLT_FILTER_SERVICE( filter ) );
+
// The result
mlt_geometry_item bounds = mlt_properties_get_data( properties, "bounds", NULL );
}
// For periodic detection (with offset of 'skip')
- if( frequency == 0 || (int)(mlt_frame_get_position(this)+skip) % frequency != 0)
+ if( frequency == 0 || (int)(mlt_filter_get_position(filter, this)+skip) % frequency != 0)
{
// Inject in stream
mlt_properties_set_data( MLT_FRAME_PROPERTIES(this), "bounds", bounds, sizeof( struct mlt_geometry_item_s ), NULL, NULL );
// There is no way to detect a crop for sure, so make up an arbitrary one
int thresh = mlt_properties_get_int( properties, "thresh" );
- int xstride, ystride;
-
- switch( *format ) {
- case mlt_image_yuv422:
- xstride = 2;
- ystride = 2 * *width;
- break;
- default:
- fprintf(stderr, "image format not supported by filter_crop_detect\n");
- return -1;
- }
+ *format = mlt_image_yuv422;
+ int xstride = 2;
+ int ystride = 2 * *width;
int x, y, average_brightness, deviation; // Scratch variables
uint8_t *q;
/* inject into frame */
mlt_properties_set_data( MLT_FRAME_PROPERTIES(this), "bounds", bounds, sizeof( struct mlt_geometry_item_s ), NULL, NULL );
+ mlt_service_unlock( MLT_FILTER_SERVICE( filter ) );
+
return error;
}
/** Constructor for the filter.
*/
-mlt_filter filter_crop_detect_init( char *arg )
+mlt_filter filter_crop_detect_init( mlt_profile profile, mlt_service_type type, const char *id, char *arg )
{
mlt_filter this = mlt_filter_new( );
if ( this != NULL )