summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY4
-rw-r--r--channels.c32
-rw-r--r--channels.h8
-rw-r--r--nit.c4
-rw-r--r--timers.c4
-rw-r--r--vdr.59
7 files changed, 53 insertions, 10 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index bc4c2ee5..25d1a253 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -933,3 +933,5 @@ Andreas Regel <andreas.regel@gmx.de>
Thomas Bergwinkl <Thomas.Bergwinkl@t-online.de>
for fixing the validity check for channel IDs, because some providers use TIDs
with value 0
+ for pointing out that transponder handling didn't work with satellites that provide
+ two transponders on the same frequency, with different polarization
diff --git a/HISTORY b/HISTORY
index ba783f69..47c2a170 100644
--- a/HISTORY
+++ b/HISTORY
@@ -2659,3 +2659,7 @@ Video Disk Recorder Revision History
a video nor an audio PID.
- Fixed editing channels (SID now range checked) and creating new channels (NID,
TID and RID are now set to 0).
+- Fixed transponder handling to make it work with satellites that provide two
+ transponders on the same frequency, with different polarization, like Hispasat
+ at S30.0W (thanks to Thomas Bergwinkl for pointing this out). See man vdr(5)
+ for details about the enhanced channel ID format.
diff --git a/channels.c b/channels.c
index b5bd9bd4..3b0b6161 100644
--- a/channels.c
+++ b/channels.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.c 1.23 2004/02/08 11:05:22 kls Exp $
+ * $Id: channels.c 1.24 2004/02/13 15:37:42 kls Exp $
*/
#include "channels.h"
@@ -153,6 +153,13 @@ const char *tChannelID::ToString(void)
return buffer;
}
+tChannelID &tChannelID::ClrPolarization(void)
+{
+ while (tid > 100000)
+ tid -= 100000;
+ return *this;
+}
+
// -- cChannel ---------------------------------------------------------------
char *cChannel::buffer = NULL;
@@ -220,11 +227,25 @@ cChannel& cChannel::operator= (const cChannel &Channel)
return *this;
}
+int cChannel::Transponder(int Frequency, char Polarization)
+{
+ // some satellites have transponders at the same frequency, just with different polarization:
+ switch (tolower(Polarization)) {
+ case 'h': Frequency += 100000; break;
+ case 'v': Frequency += 200000; break;
+ case 'l': Frequency += 300000; break;
+ case 'r': Frequency += 400000; break;
+ }
+ return Frequency;
+}
+
int cChannel::Transponder(void) const
{
int tf = frequency;
while (tf > 20000)
tf /= 1000;
+ if (IsSat())
+ tf = Transponder(tf, polarization);
return tf;
}
@@ -803,7 +824,7 @@ cChannel *cChannels::GetByServiceID(int Source, int Transponder, unsigned short
return NULL;
}
-cChannel *cChannels::GetByChannelID(tChannelID ChannelID, bool TryWithoutRid)
+cChannel *cChannels::GetByChannelID(tChannelID ChannelID, bool TryWithoutRid, bool TryWithoutPolarization)
{
for (cChannel *channel = First(); channel; channel = Next(channel)) {
if (!channel->GroupSep() && channel->GetChannelID() == ChannelID)
@@ -816,6 +837,13 @@ cChannel *cChannels::GetByChannelID(tChannelID ChannelID, bool TryWithoutRid)
return channel;
}
}
+ if (TryWithoutPolarization) {
+ ChannelID.ClrPolarization();
+ for (cChannel *channel = First(); channel; channel = Next(channel)) {
+ if (!channel->GroupSep() && channel->GetChannelID().ClrPolarization() == ChannelID)
+ return channel;
+ }
+ }
return NULL;
}
diff --git a/channels.h b/channels.h
index 6d6dd3a5..c797cb28 100644
--- a/channels.h
+++ b/channels.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: channels.h 1.15 2004/02/08 12:20:22 kls Exp $
+ * $Id: channels.h 1.16 2004/02/13 15:16:36 kls Exp $
*/
#ifndef __CHANNELS_H
@@ -61,6 +61,7 @@ public:
bool operator== (const tChannelID &arg) const;
bool Valid(void) { return (nid || tid) && sid; } // rid is optional and source may be 0//XXX source may not be 0???
tChannelID &ClrRid(void) { rid = 0; return *this; }
+ tChannelID &ClrPolarization(void);
static tChannelID FromString(const char *s);
const char *ToString(void);
static const tChannelID InvalidID;
@@ -129,7 +130,8 @@ public:
bool Save(FILE *f);
const char *Name(void) const { return name; }
int Frequency(void) const { return frequency; } ///< Returns the actual frequency, as given in 'channels.conf'
- int Transponder(void) const; ///< Returns the transponder frequency in MHz
+ int Transponder(void) const; ///< Returns the transponder frequency in MHz, plus the polarization in case of sat
+ static int Transponder(int Frequency, char Polarization); ///< builds the transponder from the given Frequency and Polarization
int Source(void) const { return source; }
int Srate(void) const { return srate; }
int Vpid(void) const { return vpid; }
@@ -187,7 +189,7 @@ public:
void ReNumber(void); // Recalculate 'number' based on channel type
cChannel *GetByNumber(int Number, int SkipGap = 0);
cChannel *GetByServiceID(int Source, int Transponder, unsigned short ServiceID);
- cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false);
+ cChannel *GetByChannelID(tChannelID ChannelID, bool TryWithoutRid = false, bool TryWithoutPolarization = false);
int BeingEdited(void) { return beingEdited; }
void IncBeingEdited(void) { beingEdited++; }
void DecBeingEdited(void) { beingEdited--; }
diff --git a/nit.c b/nit.c
index f3887164..92c02f1f 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.5 2004/01/18 16:32:45 kls Exp $
+ * $Id: nit.c 1.6 2004/02/13 14:41:36 kls Exp $
*/
#include "nit.h"
@@ -106,7 +106,7 @@ void cNitFilter::Process(u_short Pid, u_char Tid, const u_char *Data, int Length
int CodeRate = CodeRates[sd->getFecInner()];
int SymbolRate = BCD2INT(sd->getSymbolRate()) / 10;
if (ThisNIT >= 0) {
- if (ISTRANSPONDER(Frequency, Transponder())) {
+ if (ISTRANSPONDER(cChannel::Transponder(Frequency, Polarization), Transponder())) {
nits[ThisNIT].hasTransponder = true;
//printf("has transponder %d\n", Transponder());
}
diff --git a/timers.c b/timers.c
index 1db88a0f..74f36391 100644
--- a/timers.c
+++ b/timers.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: timers.c 1.8 2003/12/27 13:10:04 kls Exp $
+ * $Id: timers.c 1.9 2004/02/13 15:37:49 kls Exp $
*/
#include "timers.h"
@@ -219,7 +219,7 @@ bool cTimer::Parse(const char *s)
if (isnumber(channelbuffer))
channel = Channels.GetByNumber(atoi(channelbuffer));
else
- channel = Channels.GetByChannelID(tChannelID::FromString(channelbuffer), true);
+ channel = Channels.GetByChannelID(tChannelID::FromString(channelbuffer), true, true);
if (!channel) {
esyslog("ERROR: channel %s not defined", channelbuffer);
result = false;
diff --git a/vdr.5 b/vdr.5
index 7f8626ec..c0a6b74a 100644
--- a/vdr.5
+++ b/vdr.5
@@ -8,7 +8,7 @@
.\" License as specified in the file COPYING that comes with the
.\" vdr distribution.
.\"
-.\" $Id: vdr.5 1.23 2004/01/25 14:44:59 kls Exp $
+.\" $Id: vdr.5 1.24 2004/02/13 14:55:09 kls Exp $
.\"
.TH vdr 5 "1 Jun 2003" "1.2.0" "Video Disk Recorder Files"
.SH NAME
@@ -178,6 +178,13 @@ so the above example could also be written as S19.2E-1-1089-12003).
.br
The \fBchannel\ ID\fR is used in the \fItimers.conf\fR and \fIepg.data\fR
files to properly identify the channels.
+
+If a channel has both \fBNID\fR and \fBTID\fR set to 0, the \fBchannel\ ID\fR
+will use the \fBFrequency\fR instead of the \fBTID\fR. For satellite channels
+an additional offset of 100000, 200000, 300000 or 400000 is added to that
+number, depending on the \fBPolarization\fR (\fBH\fR, \fBV\fR, \fBL\fR or \fBR\fR,
+respectively). This is necessary because on some satellites the same frequency is
+used for two different transponders, with opposite polarization.
.SS TIMERS
The file \fItimers.conf\fR contains the timer setup.
Each line contains one timer definition, with individual fields