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 に答える