[Bf-blender-cvs] SVN commit: /data/svn/bf-blender [47009] branches/soc-2011-tomato/source/ blender/blenkernel/intern/mask.c: fix for crash in auto ketframe.
Campbell Barton
ideasman42 at gmail.com
Fri May 25 13:41:42 CEST 2012
Revision: 47009
http://projects.blender.org/scm/viewvc.php?view=rev&root=bf-blender&revision=47009
Author: campbellbarton
Date: 2012-05-25 11:41:42 +0000 (Fri, 25 May 2012)
Log Message:
-----------
fix for crash in auto ketframe.
Modified Paths:
--------------
branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c
Modified: branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c
===================================================================
--- branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c 2012-05-25 11:40:45 UTC (rev 47008)
+++ branches/soc-2011-tomato/source/blender/blenkernel/intern/mask.c 2012-05-25 11:41:42 UTC (rev 47009)
@@ -1347,6 +1347,9 @@
if (BKE_mask_object_shape_spline_index(maskobj, index,
&spline, &spline_point_index))
{
+ /* sanity check */
+ int tot = BKE_mask_object_shape_totvert(maskobj);
+
/* for interpolation */
/* TODO - assumes closed curve for now */
float uv[3][2]; /* 3x 2D handles */
@@ -1373,44 +1376,49 @@
maskobj_shape;
maskobj_shape = maskobj_shape->next)
{
- float *data_resized;
+ if (tot == maskobj_shape->tot_vert) {
+ float *data_resized;
- maskobj_shape->tot_vert++;
- data_resized = MEM_mallocN(maskobj_shape->tot_vert * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE, __func__);
- if (index > 0) {
- memcpy(data_resized,
- maskobj_shape->data,
- index * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
- }
+ maskobj_shape->tot_vert++;
+ data_resized = MEM_mallocN(maskobj_shape->tot_vert * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE, __func__);
+ if (index > 0) {
+ memcpy(data_resized,
+ maskobj_shape->data,
+ index * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
+ }
- if (index != maskobj_shape->tot_vert - 1) {
- memcpy(&data_resized[(index + 1) * MASK_OBJECT_SHAPE_ELEM_SIZE],
- maskobj_shape->data + (index * MASK_OBJECT_SHAPE_ELEM_SIZE),
- (maskobj_shape->tot_vert - (index + 1)) * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
- }
+ if (index != maskobj_shape->tot_vert - 1) {
+ memcpy(&data_resized[(index + 1) * MASK_OBJECT_SHAPE_ELEM_SIZE],
+ maskobj_shape->data + (index * MASK_OBJECT_SHAPE_ELEM_SIZE),
+ (maskobj_shape->tot_vert - (index + 1)) * sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
+ }
- if (do_init) {
- float *fp = &data_resized[index * MASK_OBJECT_SHAPE_ELEM_SIZE];
+ if (do_init) {
+ float *fp = &data_resized[index * MASK_OBJECT_SHAPE_ELEM_SIZE];
- mask_object_shape_from_mask_point(&spline->points[spline_point_index].bezt, fp);
+ mask_object_shape_from_mask_point(&spline->points[spline_point_index].bezt, fp);
- if (do_init_interpolate) {
- for (i = 0; i < 3; i++) {
- interp_weights_uv_v2_apply(uv[i],
- &fp[i * 2],
- &data_resized[(pi_prev_abs * MASK_OBJECT_SHAPE_ELEM_SIZE) + (i * 2)],
- &data_resized[(pi_next_abs * MASK_OBJECT_SHAPE_ELEM_SIZE) + (i * 2)]);
+ if (do_init_interpolate) {
+ for (i = 0; i < 3; i++) {
+ interp_weights_uv_v2_apply(uv[i],
+ &fp[i * 2],
+ &data_resized[(pi_prev_abs * MASK_OBJECT_SHAPE_ELEM_SIZE) + (i * 2)],
+ &data_resized[(pi_next_abs * MASK_OBJECT_SHAPE_ELEM_SIZE) + (i * 2)]);
+ }
}
}
+ else {
+ memset(&data_resized[index * MASK_OBJECT_SHAPE_ELEM_SIZE],
+ 0,
+ sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
+ }
+
+ MEM_freeN(maskobj_shape->data);
+ maskobj_shape->data = data_resized;
}
else {
- memset(&data_resized[index * MASK_OBJECT_SHAPE_ELEM_SIZE],
- 0,
- sizeof(float) * MASK_OBJECT_SHAPE_ELEM_SIZE);
+ printf("%s: vert mismatch %d != %d\n", __func__, maskobj_shape->tot_vert, tot);
}
-
- MEM_freeN(maskobj_shape->data);
- maskobj_shape->data = data_resized;
}
}
}
More information about the Bf-blender-cvs
mailing list