On Fri, Oct 19, 2012 at 6:15 PM, j-b-m <[email protected]> wrote:
> On Friday 19 October 2012 16:49:59 Dan Dennedy wrote:
>> On Fri, Oct 19, 2012 at 2:46 PM, j-b-m <[email protected]> wrote:
>> > Hi,
>> >
>> > Following a feature request in Kdenlive (1), I tried to make a few changes
>> > to
>> > the motion_est filter to allow the detection of scene changes in a clip.
>> >
>> > I made 2 changes to the filter:
>> >
>> > 1 - add a geometry property "bounding" allowing to process filter on a
>> > part of the image only to speed up processing
>>
>> ok
>>
>> > 2 - Store the scene changes frame positions in a "_scene_cut" property
>> > that can later be retrieved by the application
>>
>> Why hide the property with the leading underscore? If it is not
>> hidden, the someone using melt can use this to serialize the result to
>> XML for processing the results. Also, the name should perhaps be a bit
>> more consistent with the existing "shot_change"
>>
>> Also, for the value, it looks like you are you are making a list of
>> frame numbers using a colon delimiter. Hmm.. there might be a case to
>> get these as time values (i.e. clock or timecode) in the future. Also,
>> there might be a case for making the list format more consistent with
>> geometry keyframing where semi-colon is the delimiter. You could then
>> use mlt_geometry to construct this value instead of this ad hoc code.
>> An app could use mlt_geometry to parse it as well. Then, when
>> mlt_geometry is refactored into mlt_properties and a new mlt_rect
>> type, it will gain support for time values.
>
> Ok, here is an updated version, trying to use mlt_geometry.
Now for the second part: the shot_change_list property. mlt_geometry
can be kept in a data property and reused each iteration, and we can
set the serializer in case someone ones to get the property as string
(an app can get it as a geometry and use Mlt::Geometry). But first I
have to include this bugfix on mlt_geometry_serialise() :-\ You will
notice the first geometry item has some bogus values; that is an ill,
but harmless side-effect of mlt_geometry for now.
diff --git a/src/framework/mlt_geometry.c b/src/framework/mlt_geometry.c
index c4d989f..301963d 100644
--- a/src/framework/mlt_geometry.c
+++ b/src/framework/mlt_geometry.c
@@ -689,7 +689,7 @@ char *mlt_geometry_serialise( mlt_geometry self )
free( g->data );
g->data = ret;
}
- return ret;
+ return strdup( ret );
}
// Close the geometry
diff --git a/src/modules/motion_est/filter_motion_est.c
b/src/modules/motion_est/filter_motion_est.c
index a74bec7..aaf550f 100644
--- a/src/modules/motion_est/filter_motion_est.c
+++ b/src/modules/motion_est/filter_motion_est.c
@@ -952,10 +952,30 @@ static int filter_get_image( mlt_frame frame,
uint8_t **image, mlt_image_format
if( c->comparison_average > 10 * c->mb_w * c->mb_h &&
c->comparison_average > c->previous_msad * 2 )
{
- fprintf(stderr, " - SAD: %d <<Shot change>>\n",
c->comparison_average);
+ mlt_properties properties = MLT_FILTER_PROPERTIES(
filter );
+ mlt_log_verbose( MLT_FILTER_SERVICE(filter), "shot
change: %d\n",
c->comparison_average);
mlt_properties_set_int( MLT_FRAME_PROPERTIES( frame ),
"shot_change", 1);
- // c->former_vectors_valid = 0; // Invalidate the previous
frame's predictors
c->shot_change = 1;
+
+ // Add the shot change to the list
+ mlt_geometry key_frames = mlt_properties_get_data(
properties,
"shot_change_list", NULL );
+ if ( !key_frames )
+ {
+ key_frames = mlt_geometry_init();
+ mlt_properties_set_data( properties,
"shot_change_list", key_frames, 0,
+ (mlt_destructor) mlt_geometry_close,
(mlt_serialiser)
mlt_geometry_serialise );
+ if ( key_frames )
+ mlt_geometry_set_length( key_frames,
mlt_filter_get_length2(
filter, frame ) );
+ }
+ if ( key_frames )
+ {
+ struct mlt_geometry_item_s item;
+ item.frame = (int) c->current_frame_position;
+ item.x = c->comparison_average;
+ item.f[0] = 1;
+ item.f[1] = item.f[2] = item.f[3] = item.f[4] =
0;
+ mlt_geometry_insert( key_frames, &item );
+ }
}
else {
c->former_vectors_valid = 1;
------------------------------------------------------------------------------
Everyone hates slow websites. So do we.
Make your web apps faster with AppDynamics
Download AppDynamics Lite for free today:
http://p.sf.net/sfu/appdyn_sfd2d_oct
_______________________________________________
Mlt-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/mlt-devel