Commit fe9499ba authored by Klaus Schmidinger's avatar Klaus Schmidinger

Version 1.1.17

- Added new entries to 'ca.conf'.
- Fixed closing unused PID handles (thanks to Stefan Schluenss for reporting this
  one).
- Added more examples to 'diseqc.conf' (thanks to Oliver Endriss).
- Fixed disabling multiple recordings on a single DVB card (comment out the definition
  of the macros DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and DO_MULTIPLE_RECORDINGS in
  dvbdevice.c).
- Plugins can now have their very own OSD setup in the object they return from
  a call to cPlugin::MainMenuAction(). In order to implement this, the return type
  of cPlugin::MainMenuAction() had to be changed from (cOsdMenu *) to (cOsdObject *).
  So in case you are compiling an existing plugin with this version of VDR and you
  get an error message, simply change cOsdMenu to cOsdObject in the plugin's source
  for the MainMenuAction() function.
  Plugin authors who have so far (ab)used the cControl mechanism to implement their
  own raw OSD should take a look at the new demo plugin 'osddemo'. It implements
  a very primitive game that shows how a plugin can have its own raw OSD. Especially
  look into cLineGame and see how it implements the Show() function. See also
  the chapter on "User interaction" in PLUGINS.html.
- Added three new fields to the lines in 'channels.conf': NID, TID and RID. NID and
  TID are the Network and Transport Stream IDs, respectively. RID is an additional ID
  that can be used to tell apart channels that would otherwise be indistinguishable.
  This is typically the case with radio channels, which may have the same NID, TID
  and SID, but different "radio IDs". This new field is therefore called RID ("radio
  ID"). Currently NID and TID are not yet used by VDR and should always be 0. The
  RID is actually used when building the "unique channel ID", so if you have channels
  in your 'channels.conf' file that cause error messages when loading, you can set
  the RIDs of these channels to different values.
  When reading an old 'channels.conf' these new fields will be automatically
  initialized to 0 and once the file is written back to disk they will be appended
  to the channel definitions.
  Thanks to Régis Bossut for pointing out that with some providers the channels can
  only be distinguished through the RID.
- The "unique channel ID" now contains an optional 5th part (the RID). See man vdr(5).
- Updated 'channels.conf.cable' and made some channels unique using the new RID
  (thanks to Andreas Kool for pointing out the problems).
- Made some channels unique in 'channels.conf.terr' using the new RID.
- Extended the '-l' option to allow logging to LOG_LOCALn (n=0..7) by writing, for
  instance, '-l 3.7' (suggested by Jürgen Schmidt).
- Now deleting stale lock files if they have a time stamp that is outside the window
  'now +/- LOCKFILESTALETIME'. This improves things in cases where the system time
  makes far jumps, so that a lock file might end up with a time stamp that lies
  in the distant future (thanks to Oliver Endriss).
parent 8b5d4040
......@@ -276,6 +276,7 @@ Hannu Savolainen <hannu@opensound.com>
Jürgen Schmidt <ju@ct.heise.de>
for fixing a problem with 'in_addr_t' on systems with glibc < 2.2.
for suggesting to optionally allow logging to LOG_LOCALn (n=0..7)
Uwe Freese <mail@uwe-freese.de>
for suggesting to automatically close an empty recordings page after deleting
......@@ -433,6 +434,8 @@ Oliver Endriss <o.endriss@gmx.de>
current remote control
for reporting a bug in the EPG scanner, which broke 'Transfer Mode' as soon as
it kicked in
for providing examples for 'diseqc.conf'
for improving deleting stale lock files
Reinhard Walter Buchner <rw.buchner@freenet.de>
for adding some satellites to 'sources.conf'
......@@ -466,3 +469,13 @@ Steffen Barszus <st_barszus@gmx.de>
Peter Seyringer <e9425234@student.tuwien.ac.at>
for reporting a bug in saving the polarization parameter of channels that have a
number in the 'source' parameter
Stefan Schluenss <dxr3_osd@schluenss.de>
for reporting a bug where PID handles were not closed correctly
Régis Bossut <rbossut@auchan.com>
for pointing out that with some providers the channels can only be distinguished
through the RID
Andreas Kool <akool@akool.de>
for pointing out problems with non-unique definitions in 'channels.conf.cable'
......@@ -1767,3 +1767,48 @@ Video Disk Recorder Revision History
data for NVOD channels.
- Fixed a compiler warning regarding cMenuChannels::Del() and MenuTimers::Del() hiding
the base class virtual functions.
2002-11-24: Version 1.1.17
- Added new entries to 'ca.conf'.
- Fixed closing unused PID handles (thanks to Stefan Schluenss for reporting this
one).
- Added more examples to 'diseqc.conf' (thanks to Oliver Endriss).
- Fixed disabling multiple recordings on a single DVB card (comment out the definition
of the macros DO_REC_AND_PLAY_ON_PRIMARY_DEVICE and DO_MULTIPLE_RECORDINGS in
dvbdevice.c).
- Plugins can now have their very own OSD setup in the object they return from
a call to cPlugin::MainMenuAction(). In order to implement this, the return type
of cPlugin::MainMenuAction() had to be changed from (cOsdMenu *) to (cOsdObject *).
So in case you are compiling an existing plugin with this version of VDR and you
get an error message, simply change cOsdMenu to cOsdObject in the plugin's source
for the MainMenuAction() function.
Plugin authors who have so far (ab)used the cControl mechanism to implement their
own raw OSD should take a look at the new demo plugin 'osddemo'. It implements
a very primitive game that shows how a plugin can have its own raw OSD. Especially
look into cLineGame and see how it implements the Show() function. See also
the chapter on "User interaction" in PLUGINS.html.
- Added three new fields to the lines in 'channels.conf': NID, TID and RID. NID and
TID are the Network and Transport Stream IDs, respectively. RID is an additional ID
that can be used to tell apart channels that would otherwise be indistinguishable.
This is typically the case with radio channels, which may have the same NID, TID
and SID, but different "radio IDs". This new field is therefore called RID ("radio
ID"). Currently NID and TID are not yet used by VDR and should always be 0. The
RID is actually used when building the "unique channel ID", so if you have channels
in your 'channels.conf' file that cause error messages when loading, you can set
the RIDs of these channels to different values.
When reading an old 'channels.conf' these new fields will be automatically
initialized to 0 and once the file is written back to disk they will be appended
to the channel definitions.
Thanks to Régis Bossut for pointing out that with some providers the channels can
only be distinguished through the RID.
- The "unique channel ID" now contains an optional 5th part (the RID). See man vdr(5).
- Updated 'channels.conf.cable' and made some channels unique using the new RID
(thanks to Andreas Kool for pointing out the problems).
- Made some channels unique in 'channels.conf.terr' using the new RID.
- Extended the '-l' option to allow logging to LOG_LOCALn (n=0..7) by writing, for
instance, '-l 3.7' (suggested by Jürgen Schmidt).
- Now deleting stale lock files if they have a time stamp that is outside the window
'now +/- LOCKFILESTALETIME'. This improves things in cases where the system time
makes far jumps, so that a lock file might end up with a time stamp that lies
in the distant future (thanks to Oliver Endriss).
......@@ -32,7 +32,7 @@ following values 'make' call to activate the respective control mode:
REMOTE=KBD control via the PC keyboard (default)
REMOTE=RCU control via the "Remote Control Unit" receiver
(see http://www.cadsoft.de/people/kls/vdr/remote.htm)
(see http://www.cadsoft.de/vdr/remote.htm)
REMOTE=LIRC control via the "Linux Infrared Remote Control"
(see http://www.lirc.org)
REMOTE=NONE no remote control (in case only SVDRP shall be used)
......
This diff is collapsed.
......@@ -37,3 +37,7 @@ VDR Plugin 'hello' Revision History
The NEWSTRUCT compile time switch is now obsolete. The required driver is now
the CVS HEAD version dated 2002-11-01 or later.
- Introduced Make.config.
2002-11-23: Version 0.0.9
- Changed return type of MainMenuAction().
......@@ -3,7 +3,7 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: hello.c 1.9 2002/11/01 10:16:53 kls Exp $
* $Id: hello.c 1.10 2002/11/23 15:07:28 kls Exp $
*/
#include <getopt.h>
......@@ -12,7 +12,7 @@
#include <vdr/plugin.h>
#include "i18n.h"
static const char *VERSION = "0.0.8";
static const char *VERSION = "0.0.9";
static const char *DESCRIPTION = "A friendly greeting";
static const char *MAINMENUENTRY = "Hello";
......@@ -31,7 +31,7 @@ public:
virtual bool Start(void);
virtual void Housekeeping(void);
virtual const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); }
virtual cOsdMenu *MainMenuAction(void);
virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void);
virtual bool SetupParse(const char *Name, const char *Value);
};
......@@ -124,7 +124,7 @@ void cPluginHello::Housekeeping(void)
// Perform any cleanup or other regular tasks.
}
cOsdMenu *cPluginHello::MainMenuAction(void)
cOsdObject *cPluginHello::MainMenuAction(void)
{
// Perform the action when selected from the main VDR menu.
Interface->Confirm(UseAlternateGreeting ? tr("Howdy folks!") : tr("Hello world!"), GreetingTime);
......
This diff is collapsed.
VDR Plugin 'osddemo' Revision History
-------------------------------------
2002-11-23: Version 0.0.1
- Initial revision.
#
# Makefile for a Video Disk Recorder plugin
#
# $Id: Makefile 1.1 2002/11/23 14:56:44 kls Exp $
# The official name of this plugin.
# This name will be used in the '-P...' option of VDR to load the plugin.
# By default the main source file also carries this name.
#
PLUGIN = osddemo
### The version number of this plugin (taken from the main source file):
VERSION = $(shell grep 'static const char \*VERSION *=' $(PLUGIN).c | awk '{ print $$6 }' | sed -e 's/[";]//g')
### The C++ compiler and options:
CXX = g++
CXXFLAGS = -O2 -Wall -Woverloaded-virtual
### The directory environment:
DVBDIR = ../../../../DVB
VDRDIR = ../../..
LIBDIR = ../../lib
TMPDIR = /tmp
### Allow user defined options to overwrite defaults:
-include $(VDRDIR)/Make.config
### The version number of VDR (taken from VDR's "config.h"):
VDRVERSION = $(shell grep 'define VDRVERSION ' $(VDRDIR)/config.h | awk '{ print $$3 }' | sed -e 's/"//g')
### The name of the distribution archive:
ARCHIVE = $(PLUGIN)-$(VERSION)
PACKAGE = vdr-$(ARCHIVE)
### Includes and Defines (add further entries here):
INCLUDES += -I$(VDRDIR)/include -I$(DVBDIR)/include
DEFINES += -DPLUGIN_NAME_I18N='"$(PLUGIN)"'
### The object files (add further files here):
OBJS = $(PLUGIN).o
### Implicit rules:
%.o: %.c
$(CXX) $(CXXFLAGS) -c $(DEFINES) $(INCLUDES) $<
# Dependencies:
MAKEDEP = g++ -MM -MG
DEPFILE = .dependencies
$(DEPFILE): Makefile
@$(MAKEDEP) $(DEFINES) $(INCLUDES) $(OBJS:%.o=%.c) > $@
-include $(DEPFILE)
### Targets:
all: libvdr-$(PLUGIN).so
libvdr-$(PLUGIN).so: $(OBJS)
$(CXX) $(CXXFLAGS) -shared $(OBJS) -o $@
@cp $@ $(LIBDIR)/$@.$(VDRVERSION)
dist: clean
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@mkdir $(TMPDIR)/$(ARCHIVE)
@cp -a * $(TMPDIR)/$(ARCHIVE)
@tar czf $(PACKAGE).tgz -C $(TMPDIR) $(ARCHIVE)
@-rm -rf $(TMPDIR)/$(ARCHIVE)
@echo Distribution package created as $(PACKAGE).tgz
clean:
@-rm -f $(OBJS) $(DEPFILE) *.so *.tgz core* *~
This is a "plugin" for the Video Disk Recorder (VDR).
Written by: Klaus Schmidinger <kls@cadsoft.de>
Project's homepage: http://www.cadsoft.de/vdr
Latest version available at: http://www.cadsoft.de/vdr
See the file COPYING for license information.
Description:
Demonstration of how a plugin can have its very own OSD setup.
It's a very primitive game that opens a small window in which the
user can draw lines with the Up, Down, Left and Right buttons.
The color buttons are used to switch color.
Press Ok to close the window.
/*
* osddemo.c: A plugin for the Video Disk Recorder
*
* See the README file for copyright information and how to reach the author.
*
* $Id: osddemo.c 1.1 2002/11/24 10:32:59 kls Exp $
*/
#include <vdr/plugin.h>
static const char *VERSION = "0.0.1";
static const char *DESCRIPTION = "Demo of arbitrary OSD setup";
static const char *MAINMENUENTRY = "Osd Demo";
// --- cLineGame -------------------------------------------------------------
class cLineGame : public cOsdObject {
private:
cOsdBase *osd;
int x;
int y;
eDvbColor color;
public:
cLineGame(void);
~cLineGame();
virtual void Show(void);
virtual eOSState ProcessKey(eKeys Key);
};
cLineGame::cLineGame(void)
{
osd = NULL;
x = y = 50;
color = clrRed;
}
cLineGame::~cLineGame()
{
delete osd;
}
void cLineGame::Show(void)
{
osd = cOsd::OpenRaw(100, 50);
if (osd) {
osd->Create(0, 0, 100, 200, 4);
osd->AddColor(clrBackground);
osd->AddColor(clrRed);
osd->AddColor(clrGreen);
osd->AddColor(clrYellow);
osd->AddColor(clrBlue);
osd->Clear();
osd->Flush();
}
}
eOSState cLineGame::ProcessKey(eKeys Key)
{
eOSState state = cOsdObject::ProcessKey(Key);
if (state == osUnknown) {
switch (Key & ~k_Repeat) {
case kUp: if (y > 0) y--; break;
case kDown: if (y < 196) y++; break;
case kLeft: if (x > 0) x--; break;
case kRight: if (x < 96) x++; break;
case kRed: color = clrRed; break;
case kGreen: color = clrGreen; break;
case kYellow: color = clrYellow; break;
case kBlue: color = clrBlue; break;
case kOk: return osEnd;
default: return state;
}
osd->Fill(x, y, x + 3, y + 3, color);
osd->Flush();
state = osContinue;
}
return state;
}
// --- cPluginOsddemo --------------------------------------------------------
class cPluginOsddemo : public cPlugin {
private:
// Add any member variables or functions you may need here.
public:
cPluginOsddemo(void);
virtual ~cPluginOsddemo();
virtual const char *Version(void) { return VERSION; }
virtual const char *Description(void) { return DESCRIPTION; }
virtual const char *CommandLineHelp(void);
virtual bool ProcessArgs(int argc, char *argv[]);
virtual bool Start(void);
virtual void Housekeeping(void);
virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; }
virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void);
virtual bool SetupParse(const char *Name, const char *Value);
};
cPluginOsddemo::cPluginOsddemo(void)
{
// Initialize any member variables here.
// DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
// VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
}
cPluginOsddemo::~cPluginOsddemo()
{
// Clean up after yourself!
}
const char *cPluginOsddemo::CommandLineHelp(void)
{
// Return a string that describes all known command line options.
return NULL;
}
bool cPluginOsddemo::ProcessArgs(int argc, char *argv[])
{
// Implement command line argument processing here if applicable.
return true;
}
bool cPluginOsddemo::Start(void)
{
// Start any background activities the plugin shall perform.
return true;
}
void cPluginOsddemo::Housekeeping(void)
{
// Perform any cleanup or other regular tasks.
}
cOsdObject *cPluginOsddemo::MainMenuAction(void)
{
// Perform the action when selected from the main VDR menu.
return new cLineGame;
}
cMenuSetupPage *cPluginOsddemo::SetupMenu(void)
{
// Return a setup menu in case the plugin supports one.
return NULL;
}
bool cPluginOsddemo::SetupParse(const char *Name, const char *Value)
{
// Parse your own setup parameters and store their values.
return false;
}
VDRPLUGINCREATOR(cPluginOsddemo); // Don't touch this!
......@@ -23,3 +23,7 @@ VDR Plugin 'status' Revision History
The NEWSTRUCT compile time switch is now obsolete. The required driver is now
the CVS HEAD version dated 2002-11-01 or later.
- Introduced Make.config.
2002-11-23: Version 0.0.6
- Changed return type of MainMenuAction().
......@@ -3,13 +3,13 @@
*
* See the README file for copyright information and how to reach the author.
*
* $Id: status.c 1.5 2002/11/01 10:16:59 kls Exp $
* $Id: status.c 1.6 2002/11/23 15:07:40 kls Exp $
*/
#include <vdr/plugin.h>
#include <vdr/status.h>
static const char *VERSION = "0.0.5";
static const char *VERSION = "0.0.6";
static const char *DESCRIPTION = "Status monitor test";
static const char *MAINMENUENTRY = NULL;
......@@ -115,7 +115,7 @@ public:
virtual bool Start(void);
virtual void Housekeeping(void);
virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; }
virtual cOsdMenu *MainMenuAction(void);
virtual cOsdObject *MainMenuAction(void);
virtual cMenuSetupPage *SetupMenu(void);
virtual bool SetupParse(const char *Name, const char *Value);
};
......@@ -158,7 +158,7 @@ void cPluginStatus::Housekeeping(void)
// Perform any cleanup or other regular tasks.
}
cOsdMenu *cPluginStatus::MainMenuAction(void)
cOsdObject *cPluginStatus::MainMenuAction(void)
{
// Perform the action when selected from the main VDR menu.
return NULL;
......
......@@ -4,7 +4,7 @@ Video Disk Recorder ('VDR')
These files contain the source code of the "Video Disk Recorder",
which is based on the DVB driver of the LinuxTV project (http://linuxtv.org).
For details about the "Video Disk Recorder" project please
refer to http://www.cadsoft.de/people/kls/vdr.
refer to http://www.cadsoft.de/vdr.
There is also a remote control unit described on those
Web pages, which can be used within this program.
......
......@@ -13,11 +13,83 @@
101 Premiere World
102 ORF
103 DIGI-Kabel
# Cryptoworks
201 GOD-DIGITAL
# Videoguard
301 Sky Digital
# Viaccess 1
401 SRG Swiss
402 NTV Plus
403 Viasat
404 Parabole Reunion
# Viaccess 2
501 Alpha Digital Greece
# Cryptoworks
601 UPC Direct
602 DigiTurk
# Mediaguard
701 CanalSatellite Reunion
# Mediaguard 2
801 Orbit Network
# Nagravision
901 PolSat Cyfrowy
# Irdeto 2
1001 ADD
1002 Nova Greece
1003 Multichoice Africa
# Conax
1101 Canal Digital Scandinavia
# Mediaguard, Viaccess 1, Viaccess 2
10001 AB Sat France
10002 TPS France
# Videoguard, Mediaguard 2, Irdeto 1
11001 Stream TV Italy
# Videoguard, Mediaguard 2, Cryptoworks
12001 Tele+ Digitale
# Mediaguard 1, Irdeto 1
13001 Canal Digitaal Satelliet NL
# Mediaguard 1, Mediaguard 2, Viaccess 1
14001 Canal Satellite France
# Mediaguard 1, Mediaguard 2, Viaccess 1, Cryptoworks
15001 Canal Satelite Digital Espana
# Mediaguard 2, Cryptoworks
16001 Cyfra+ Polska
# Special values to "hard code" a channel to a specific DVB card:
1 DVB 1
......
......@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
* $Id: channels.c 1.8 2002/11/10 13:01:55 kls Exp $
* $Id: channels.c 1.9 2002/11/24 14:28:48 kls Exp $
*/
#include "channels.h"
......@@ -120,6 +120,39 @@ int MapToDriver(int Value, const tChannelParameterMap *Map)
return -1;
}
// -- tChannelID -------------------------------------------------------------
const tChannelID tChannelID::InvalidID;
bool tChannelID::operator== (const tChannelID &arg) const
{
return source == arg.source && nid == arg.nid && tid == arg.tid && sid == arg.sid && rid == arg.rid;
}
tChannelID tChannelID::FromString(const char *s)
{
char *sourcebuf = NULL;
int nid;
int tid;
int sid;
int rid = 0;
int fields = sscanf(s, "%a[^-]-%d-%d-%d-%d", &sourcebuf, &nid, &tid, &sid, &rid);
if (fields == 4 || fields == 5) {
int source = cSource::FromString(sourcebuf);
free(sourcebuf);
if (source >= 0)
return tChannelID(source, nid, tid, sid, rid);
}
return tChannelID::InvalidID;
}
const char *tChannelID::ToString(void)
{
static char buffer[256];
snprintf(buffer, sizeof(buffer), rid ? "%s-%d-%d-%d-%d" : "%s-%d-%d-%d", cSource::ToString(source), nid, tid, sid, rid);
return buffer;
}
// -- cChannel ---------------------------------------------------------------
char *cChannel::buffer = NULL;
......@@ -137,7 +170,10 @@ cChannel::cChannel(void)
dpid2 = 0;
tpid = 32;
ca = 0;
sid = 0;
nid = 0;
tid = 0;
sid = 888;
rid = 0;
groupSep = false;
polarization = 'v';
inversion = INVERSION_AUTO;
......@@ -158,36 +194,14 @@ cChannel& cChannel::operator= (const cChannel &Channel)
static int MHz(int frequency)
{
while (frequency > 20000) {
while (frequency > 20000)
frequency /= 1000;
}
return frequency;
}
uint64 cChannel::GetChannelID(void) const
tChannelID cChannel::GetChannelID(void) const
{
return (uint64(source) << 48) | (uint64(0) << 32) | ((MHz(frequency)) << 16) | sid;
}
const char *cChannel::GetChannelIDStr(void) const
{
static char buffer[256];
snprintf(buffer, sizeof(buffer), "%s-%d-%d-%d", cSource::ToString(source), 0, MHz(frequency), sid);
return buffer;
}
uint64 cChannel::StringToChannelID(const char *s)
{
char *sourcebuf = NULL;
int reserved;
int frequency;
int sid;
if (4 == sscanf(s, "%a[^-]-%d-%d-%d", &sourcebuf, &reserved, &frequency, &sid)) {
int source = cSource::FromString(sourcebuf);
if (source >= 0)
return (uint64(source) << 48) | (uint64(reserved) << 32) | (frequency << 16) | sid;
}
return 0;
return tChannelID(source, nid, nid ? tid : MHz(frequency), sid, rid);
}
static int PrintParameter(char *p, char Name, int Value)
......@@ -281,7 +295,7 @@ const char *cChannel::ToText(cChannel *Channel)
if (Channel->dpid2)
q += snprintf(q, sizeof(apidbuf) - (q - apidbuf), ",%d", Channel->dpid2);
*q = 0;
asprintf(&buffer, "%s:%d:%s:%s:%d:%d:%s:%d:%d:%d\n", s, Channel->frequency, Channel->ParametersToString(), cSource::ToString(Channel->source), Channel->srate, Channel->vpid, apidbuf, Channel->tpid, Channel->ca, Channel->sid);
asprintf(&buffer, "%s:%d:%s:%s:%d:%d:%s:%d:%d:%d:%d:%d:%d\n", s, Channel->frequency, Channel->ParametersToString(), cSource::ToString(Channel->source), Channel->srate, Channel->vpid, apidbuf, Channel->tpid, Channel->ca, Channel->sid, Channel->nid, Channel->tid, Channel->rid);
}
return buffer;
}
......@@ -312,7 +326,7 @@ bool cChannel::Parse(const char *s, bool AllowNonUniqueID)
char *sourcebuf = NULL;
char *parambuf = NULL;
char *apidbuf = NULL;
int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%d :%a[^:]:%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpid, &apidbuf, &tpid, &ca, &sid);
int fields = sscanf(s, "%a[^:]:%d :%a[^:]:%a[^:] :%d :%d :%a[^:]:%d :%d :%d :%d :%d :%d ", &namebuf, &frequency, &parambuf, &sourcebuf, &srate, &vpid, &apidbuf, &tpid, &ca, &sid, &nid, &tid, &rid);
if (fields >= 9) {
if (fields == 9) {
// allow reading of old format
......@@ -430,18 +444,25 @@ cChannel *cChannels::GetByServiceID(int Source, unsigned short ServiceID)
return NULL;
}
cChannel *cChannels::GetByChannelID(uint64 ChannelID)
cChannel *cChannels::GetByChannelID(tChannelID ChannelID, bool TryWithoutRid)
{
for (cChannel *channel = First(); channel; channel = Next(channel)) {
if (!channel->GroupSep() && channel->GetChannelID() == ChannelID)
return channel;
}
if (TryWithoutRid) {
ChannelID.ClrRid();
for (cChannel *channel = First(); channel; channel = Next(channel)) {
if (!channel->GroupSep() && channel->GetChannelID().ClrRid() == ChannelID)
return channel;
}
}
return NULL;
}
bool cChannels::HasUniqueChannelID(cChannel *NewChannel, cChannel *OldChannel)
{
uint64 NewChannelID = NewChannel->GetChannelID();
tChannelID NewChannelID = NewChannel->GetChannelID();
for (cChannel *channel = First(); channel; channel = Next(channel)) {
if (!channel->GroupSep() && channel != OldChannel && channel->GetChannelID() == NewChannelID)
return false;
......
This diff is collapsed.
This diff is collapsed.
: UK channels for Crystal Palace, London
BBC ONE (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:600:601,602:602:0:4164
BBC TWO (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:610:611,612:0:2:4228
BBC THREE (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:620:621,622:0:0:4351
BBC NEWS 24 (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:640:641:0:0:4415
Ch 14 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:2840:2841,2843:0:0:8800
ITV 2 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:2818:2819,2821:0:0:8325
ITV 1 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:512:650,660:0:0:8261
Channel 4 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:2827:2828,2830:0:0:8384
five (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6017:6018,6019:0:0:12866
QVC (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6049:6050:0:0:13120
TV Travel Shop (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6161:6162:0:0:13632
ITV News (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6193:6194:0:0:13760
BBC PARLMNT (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:403:0:0:16768
BBC FOUR (TV):529833:I0C34D0M16B8T2G32Y0:T:27500:201:401,402:0:0:16832
BBC R5 Live (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:430:0:0:17920
BBC 5L SportsX (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:431:0:0:17984
BBC 6 Music (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:432:0:0:18048
BBC 7 (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:433:0:0:18112
1Xtra BBC (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:434:0:0:18176
BBC Asian Net. (RADIO):529833:I0C34D0M16B8T2G32Y0:T:27500:0:435:0:0:18240
701 (TV):529833:I0C34D0M16B8T2G32Y0:T:27500:203:407:0:0:19456
702 (TV):529833:I0C34D0M16B8T2G32Y0:T:27500:204:411:0:0:19520
Sky News (TV):578166:I0C34D0M16B8T2G32Y0:T:27500:101:102,104:0:0:22080
Sky Spts News (TV):578166:I0C34D0M16B8T2G32Y0:T:27500:201:202,204:0:0:22144
Sky Travel (TV):578166:I0C34D0M16B8T2G32Y0:T:27500:301:302,304:0:0:22208
UKHistory (TV):578166:I0C34D0M16B8T2G32Y0:T:27500:401:402,404:0:0:22272
THE HITS (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:101:102:0:0:25664
TMF (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:201:202,204:0:0:25728
UKHomeStyle (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:301:302,306:0:0:25792
f tn (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:301:302,304:0:0:25856
Ch 44 (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:501:502,504:0:0:26048
Smash Hits! (RADIO):537833:I0C34D0M16B8T2G32Y0:T:27500:0:1201:0:0:26240
KISS (RADIO):537833:I0C34D0M16B8T2G32Y0:T:27500:0:1101:0:0:26176
Kerrang! (RADIO):537833:I0C34D0M16B8T2G32Y0:T:27500:0:1301:0:0:26304
jazz fm (RADIO):537833:I0C34D0M16B8T2G32Y0:T:27500:0:1401:0:0:26368
oneword (RADIO):537833:I0C34D0M16B8T2G32Y0:T:27500:0:1501:0:0:26432
BBC World Sv (RADIO):537833:I0C34D0M16B8T2G32Y0:T:27500:0:1601:0:0:26496
Ch 22 (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:501:502,504:0:0:26048
Ch 32 (TV):537833:I0C34D0M16B8T2G32Y0:T:27500:501:502,504:0:0:25984
BBC ONE (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:600:601,602:602:0:4164:0:0:0
BBC TWO (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:610:611,612:0:2:4228:0:0:0
BBC THREE (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:620:621,622:0:0:4351:0:0:0
BBC NEWS 24 (TV):505833:I0C34D0M16B8T2G32Y0:T:27500:640:641:0:0:4415:0:0:0
Ch 14 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:2840:2841,2843:0:0:8800:0:0:0
ITV 2 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:2818:2819,2821:0:0:8325:0:0:0
ITV 1 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:512:650,660:0:0:8261:0:0:0
Channel 4 (TV):481833:I0C23D0M64B8T2G32Y0:T:27500:2827:2828,2830:0:0:8384:0:0:0
five (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6017:6018,6019:0:0:12866:0:0:0
QVC (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6049:6050:0:0:13120:0:0:0
TV Travel Shop (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6161:6162:0:0:13632:0:0:0
ITV News (TV):561833:I0C23D0M64B8T2G32Y0:T:27500:6193:6194:0:0:13760:0:0:0