[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