From dac9932ef0b219bc69b73d9d15d8c539de961045 Mon Sep 17 00:00:00 2001 From: Klaus Schmidinger Date: Sun, 18 Jan 2004 10:09:47 +0100 Subject: [PATCH] Fixed some out of bounds parameter settings when scanning NITs for cable and satellite transponders --- HISTORY | 2 ++ nit.c | 10 +++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/HISTORY b/HISTORY index d8923166..f445110e 100644 --- a/HISTORY +++ b/HISTORY @@ -2602,3 +2602,5 @@ Video Disk Recorder Revision History - Excess blanks in channel names read from the SDT are now removed. - Fixed wrong parameter settings when scanning NITs for terrestrial transponders (thanks to Christian Tramnitz for pointing out this one). +- Fixed some out of bounds parameter settings when scanning NITs for cable + and satellite transponders. diff --git a/nit.c b/nit.c index 8439d4ce..652b03af 100644 --- a/nit.c +++ b/nit.c @@ -4,7 +4,7 @@ * See the main source file 'vdr.c' for copyright information and * how to reach the author. * - * $Id: nit.c 1.2 2004/01/18 09:49:55 kls Exp $ + * $Id: nit.c 1.3 2004/01/18 10:09:47 kls Exp $ */ #include "nit.h" @@ -46,7 +46,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length int Frequency = BCD2INT(sd->getFrequency()) / 100; static char Polarizations[] = { 'h', 'v', 'l', 'r' }; char Polarization = Polarizations[sd->getPolarization()]; - static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE }; + static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE }; int CodeRate = CodeRates[sd->getFecInner()]; int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10; bool found = false; @@ -72,10 +72,10 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length int Source = cSource::FromData(cSource::stCable); int Frequency = BCD2INT(sd->getFrequency()) / 10; //XXX FEC_outer??? - static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE, FEC_NONE }; + static int CodeRates[] = { FEC_NONE, FEC_1_2, FEC_2_3, FEC_3_4, FEC_5_6, FEC_7_8, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_AUTO, FEC_NONE }; int CodeRate = CodeRates[sd->getFecInner()]; - static int Modulations[] = { QPSK, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256 }; - int Modulation = Modulations[sd->getModulation()]; + static int Modulations[] = { QPSK, QAM_16, QAM_32, QAM_64, QAM_128, QAM_256, QAM_AUTO }; + int Modulation = Modulations[min(sd->getModulation(), 6)]; int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10; bool found = false; for (cChannel *Channel = Channels.First(); Channel; Channel = Channels.Next(Channel)) {