[mythtv] [PATCH] USALS array overflow problem
Kevin Kuphal
kuphal at dls.net
Sat Apr 29 17:32:24 UTC 2006
Yeasah Pell wrote:
> There's a problem with the USALS code in libs/libmythtv/dvbdiseqc.cpp
> that causes the positioner gotox values to be calculated incorrectly
> for certain positions. The problem is caused by an overrun of a table.
> The index of a 10 element table is given by the following code:
>
> CMD2 += DecimalLookup[(int)round(USALS*10)];
>
> Where in that context USALS is a floating point value which can range
> from 0.0 to 0.999999, which causes the resultant index to be from
> 0-10, and thus overruns the end of the table by 1 (returning bogus
> positioning data in this case). The simplest solution woud be to
> change the code to use floor():
>
> CMD2 += DecimalLookup[(int)floor(USALS*10)];
>
> However, the presence of the table is silly anyway -- the spec shows a
> lookup table as decimal only as a convenience, the encoding is
> actually as a fixed point fraction. As such, the correct value would
> most easily be calculated directly from the angle. Attached is a patch
> that eliminates the table overrun problem, and is also more accurate
> (and less complicated, too).
>
> I would suggest that this be applied to 0.19-fixes as well as the
> trunk, since the problem really does cause issues with positioning. In
> the past, I've had to work around "bad" angles by adding some small
> value to the angle I actually wanted.
Thank you for the submission. Patches should be submitted to
http://svn.mythtv.org/trac as a new ticket.
Thanks,
Kevin
More information about the mythtv-dev
mailing list