0

我知道无符号数永远不会小于 0,也无需对其进行测试。但我想避免调谐器的虚假频率。

/* freqKHz is in KHz (duh) */   
void videoinput_set_tuner_freq( videoinput_t *vidin, int freqKHz )
{
        unsigned long frequency = freqKHz;

        if( videoinput_has_tuner( vidin ) ) {
            if( frequency < 0 ) {
                /* Ignore bogus frequencies. */
                return;
        }

        frequency *= 16;

        vidin->tunerlow = (tuner.capability & V4L2_TUNER_CAP_LOW) ? 1 : 0;

        if( !vidin->tunerlow ) {
            frequency /= 1000; /* switch to MHz */
        }

        ...
}

是否可以以另一种方式进行此检查(可能有限制)?

对不可能存在的值的“虚假”频率提出更好的定义。

如果频率自调谐后没有改变,则数字驱动器不会设置频率。模拟调谐器驱动器对数字驱动器保存的频率一无所知。当使用 video4linux 代码设置频率时,硬件会发生变化,但数字驱动程序的状态不会更新。

4

1 回答 1

0

1 当你正在转换

unsigned long frequency = freqKHz;

执行符号检查

if( freqKHz < 0 ) {  // note: freqKHz
  /* Ignore bogus frequencies. */
  return;

2 根据您的申请,对合理界限进行后续检查也是一种很好的做法。当然,最小检查可以与上述结合。

if((frequency < MinFreq ) || (( frequency > MaxFreq ) {
  /* Ignore bogus frequencies. */
  return;

3 推荐四舍五入的转换:

frequency = (frequency + 1000/2) / 1000; /* switch to MHz */
于 2013-08-26T01:47:19.560 回答