I can confirm your findings- i think this is a bug in sanei_constrain_value.c.
allan On Tue, Jul 16, 2013 at 8:46 PM, Bureau <viresh_shirol at yahoo.co.uk> wrote: > Hi all, > > During my backend testing efforts with tstbackend.c frontend that is > available in the distribution ,I observed an issue in the > sanei_constrain_value function. > > The details are as below. > 1)I believe the specifications for SANE_Range are simple enough and there are > no further rules on the values for min,max and quant members. > > 2)assuming #1 above is correct, my observation is that the constrain_value > function returns values that are greater than the max specified for the range. > > 3)I am assuming that #2 item is either unknown or known but not fixed/valid > scenario. > > > 4)the issue > > the issue happens for constraint type RANGE when following condition is > satisfied > > (max-min)%quant >=(quant/2) > > AND > > value to be set >=max > > > Cause:Due to rounding done using quant/2 value,the final value put in > array[i] overshoots the max value by at the max quant/2 units. > > > 5>Why this is an issue for me > > for few reasons > a)I blindly believed the value returned by constrain_value is actually > constrained to the max. By this assumption,I did not have to check the values > everywhere for their constraint-wise-correctness. > > b)the machine that I am writing the backend for seems to take tl br values in > mm and seems to do some kind of validation using which it decides the actual > scan size.So offset of value/s for tl br options would lead to heavy offsets > when large resolution scan is done. > > c)the issue is very dominant,I believe,when the range type is SANE_Fixed. > Note that in this case the quant value is sufficiently large leading to > larger offsets. > > 6)Solutions possible > a)temporary fix can just check whether the adjusted value is larger than Max > for the range and set it to either max or one quant level lesser. > Also,I can temporarily fix it in a local function. > b)not very sure but If the rounding via quant/2 is removed we can safely say > that the value is always safe. I think it's a subjective item and can not > discuss further but I think flooring isn't that bad. > > > > 7)My test values(sorry to put them at the end) > max=SANE_FIX(431.8);//ledger width > min=SANE_FIX(0.0); > quant=SANE_FIX(0.01);//tried .1,1.0 too > > value to be set (actually the issue was found when testing with tstbkend.c > fronted) is 431.8. (or more ...as constrain value reduces it to max in that > case) > > > Query:how do I proceed with this?My main question is "am I doing something > wrong??" > > 8)Additional: > this is my first post.I wanna thank you all and especially the ones who have > authored the tstbackend frontend.Also,please note that I may ve wrong in > using fractional quant values etc but i think there was no limitation w.r.t. > in the spec. I apologize in advance if anyone feels any sentence in this post > seems to show impoliteness in any way. ...I am newbie/noob u knw!!!! > > > Thanks and regards, > Viresh > > > > > > > > > Sent from my iPhone > -- > sane-devel mailing list: sane-devel at lists.alioth.debian.org > http://lists.alioth.debian.org/cgi-bin/mailman/listinfo/sane-devel > Unsubscribe: Send mail with subject "unsubscribe your_password" > to sane-devel-request at lists.alioth.debian.org -- "The truth is an offense, but not a sin"
