Closed rrrapha closed 5 years ago
It is a sane fix. The implicit conversion is already producing a warning in the new test builds:
warning: unknown warning option '-Wrestrict' [-Wunknown-warning-option]
/Users/travis/build/dyne/frei0r/src/filter/rgbsplit0r/rgbsplit0r.c:112:20: warning: implicit conversion from 'double' to 'unsigned int' changes value from 0.5 to 0 [-Wliteral-conversion]
inst->shiftY = 0.5;
~ ^~~
/Users/travis/build/dyne/frei0r/src/filter/rgbsplit0r/rgbsplit0r.c:113:20: warning: implicit conversion from 'double' to 'unsigned int' changes value from 0.5 to 0 [-Wliteral-conversion]
inst->shiftX = 0.5;
~ ^~~
3 warnings generated.
warning: unknown warning option '-Wrestrict' [-Wunknown-warning-option]
/Users/travis/build/dyne/frei0r/src/filter/rgbsplit0r/rgbsplit0r.c:112:20: warning: implicit conversion from 'double' to 'unsigned int' changes value from 0.5 to 0 [-Wliteral-conversion]
inst->shiftY = 0.5;
~ ^~~
/Users/travis/build/dyne/frei0r/src/filter/rgbsplit0r/rgbsplit0r.c:113:20: warning: implicit conversion from 'double' to 'unsigned int' changes value from 0.5 to 0 [-Wliteral-conversion]
inst->shiftX = 0.5;
~ ^~~
3 warnings generated.
the check assumes shiftX is always positive which is the behavior of the filter
switch (param_index)
{
case 0 : // vertical shift
{
// scale to [-1/16..1/16]
double shiftY = *((double*)param) - 0.5;
// Convert to range from 0 to one eighth of height
shiftY = ((inst->height / 8) * shiftY);
inst->shiftY = (unsigned int)shiftY;
break;
}
case 1 : // horizontal shift
{
// scale to [-1/16..1/16]
double shiftX = *((double*)param) - 0.5;
// Convert to range from 0 to one eighth of width
shiftX = ((inst->width / 8) * shiftX);
inst->shiftX = (unsigned int)shiftX;
break;
}
}
Resolves #35