summary |
shortlog |
log |
commit | commitdiff |
tree
raw |
patch |
inline | side by side (from parent 1:
2b85d54)
When propagating size information between effects in a phase,
we'd forget to check if the effect wanted to change size
and use that information instead of our own heuristics.
Fix that.
This is currently a no-op, since right now we always break a phase
when an effect changes output size, but there are very real situations
where we'd be fine with not doing so, so this patch paves the way
for that.
// Now propagate from the inputs towards the end, and inform as we go.
// The rules are simple:
//
// Now propagate from the inputs towards the end, and inform as we go.
// The rules are simple:
//
- // 1. Don't touch effects that already have given sizes (ie., inputs).
+ // 1. Don't touch effects that already have given sizes (ie., inputs
+ // or effects that change the output size).
// 2. If all of your inputs have the same size, that will be your output size.
// 3. Otherwise, your output size is 0x0.
for (unsigned i = 0; i < phase->effects.size(); ++i) {
// 2. If all of your inputs have the same size, that will be your output size.
// 3. Otherwise, your output size is 0x0.
for (unsigned i = 0; i < phase->effects.size(); ++i) {
this_output_height = 0;
}
}
this_output_height = 0;
}
}
- node->output_width = this_output_width;
- node->output_height = this_output_height;
+ if (node->effect->changes_output_size()) {
+ // We cannot call get_output_size() before we've done inform_input_size()
+ // on all inputs.
+ unsigned real_width_ignored, real_height_ignored;
+ node->effect->get_output_size(&real_width_ignored, &real_height_ignored,
+ &node->output_width, &node->output_height);
+ } else {
+ node->output_width = this_output_width;
+ node->output_height = this_output_height;
+ }