+ return 0;
+}
+
+FILTERLIST* interpolateFilterList(FILTERLIST* list1, FILTERLIST* list2, float ratio, interpolation_t* inter)
+{
+ if (!list1 && !list2)
+ return list1;
+ FILTERLIST start, target, dummy;
+ dummy.num = 0;
+ if (!list1)
+ list1 = &dummy;
+ if (!list2)
+ list2 = &dummy;
+ int i, j = 0;
+ int common = list1->num < list2->num ? list1->num : list2->num;
+ for (i = 0; i < common; i++)
+ {
+ start.filter[j] = list1->filter[i];
+ if (list2->filter[i]->type == list1->filter[i]->type)
+ {
+ target.filter[j] = list2->filter[i];
+ j++;
+ }
+ else
+ {
+ target.filter[j] = noFilter(list1->filter[i]->type);
+ j++;
+ start.filter[j] = noFilter(list2->filter[i]->type);
+ target.filter[j] = list2->filter[i];
+ j++;
+ }
+ }
+ if (list1->num > common)
+ for (i = common; i < list1->num; i++)
+ {
+ start.filter[j] = list1->filter[i];
+ target.filter[j] = noFilter(list1->filter[i]->type);
+ j++;
+ }
+ if (list2->num > common)
+ for (i = common; i < list2->num; i++)
+ {
+ start.filter[j] = noFilter(list2->filter[i]->type);
+ target.filter[j] = list2->filter[i];
+ j++;
+ }
+ start.num = j;
+ target.num = j;
+ FILTERLIST* mixedList = (FILTERLIST*)malloc(sizeof(FILTERLIST));
+ mixedList->num = j;
+ for (i = 0; i < j; i++)
+ mixedList->filter[i] = interpolateFilter(start.filter[i], target.filter[i], ratio, inter);
+ return mixedList;