diff options
Diffstat (limited to 'media-video/vdr/files/vdr-1.3.36-SourceCaps.patch')
-rw-r--r-- | media-video/vdr/files/vdr-1.3.36-SourceCaps.patch | 214 |
1 files changed, 214 insertions, 0 deletions
diff --git a/media-video/vdr/files/vdr-1.3.36-SourceCaps.patch b/media-video/vdr/files/vdr-1.3.36-SourceCaps.patch new file mode 100644 index 000000000000..ed97f027a30c --- /dev/null +++ b/media-video/vdr/files/vdr-1.3.36-SourceCaps.patch @@ -0,0 +1,214 @@ +diff -ur vdr-1.3.33/config.c vdr-1.3.33+SourceCaps/config.c +--- vdr-1.3.33/config.c 2005-09-09 17:08:59.000000000 +0200 ++++ vdr-1.3.33+SourceCaps/config.c 2005-09-25 20:25:45.869496656 +0200 +@@ -15,6 +15,7 @@ + #include "interface.h" + #include "plugin.h" + #include "recording.h" ++#include "sources.h" + + // IMPORTANT NOTE: in the 'sscanf()' calls there is a blank after the '%d' + // format characters in order to allow any number of blanks after a numeric +@@ -300,6 +301,8 @@ + MultiSpeedMode = 0; + ShowReplayMode = 0; + ResumeID = 0; ++ memset(SourceCaps, 0, sizeof SourceCaps); ++ SourceCapsSet = false; + CurrentChannel = -1; + CurrentVolume = MAXVOLUME; + CurrentDolby = 0; +@@ -401,6 +404,49 @@ + return true; + } + ++void cSetup::StoreSourceCaps(const char *Name) ++{ ++ cSetupLine *l; ++ while ((l = Get(Name)) != NULL) ++ Del(l); ++ ++ for (int i = 0; i < MAXDEVICES; i++) { ++ char buffer[KILOBYTE(10)]={0,}, *q = buffer; ++ int j = 0; ++ while (SourceCaps[i][j] && j < MAXSOURCECAPS) { ++ if (j==0) ++ q += snprintf(buffer, sizeof(buffer), "%i ", i+1); ++ q += snprintf(q, sizeof(buffer) - (q-buffer), "%s ", *cSource::ToString(SourceCaps[i][j++])); ++ } ++ if (*buffer) ++ Store(Name, buffer, NULL, true); ++ } ++} ++ ++bool cSetup::ParseSourceCaps(const char *Value) ++{ ++ char *p; ++ int d = strtol(Value, &p, 10)-1, i = 0; ++ while (p < Value+strlen(Value)) { ++ if (*p==0) return true; ++ if (isblank(*p)) ++p; ++ if (isalpha(*p)) { ++ int source = cSource::FromString(p); ++ if (source != cSource::stNone) { ++ SourceCaps[d][i++] = source; ++ SourceCapsSet = true; ++ } ++ else ++ return false; ++ while (!isblank(*p) && *p) ++ ++p; ++ if (i>MAXSOURCECAPS) ++ return false; ++ } ++ } ++ return true; ++} ++ + bool cSetup::Parse(const char *Name, const char *Value) + { + if (!strcasecmp(Name, "OSDLanguage")) OSDLanguage = atoi(Value); +@@ -458,6 +504,7 @@ + else if (!strcasecmp(Name, "MultiSpeedMode")) MultiSpeedMode = atoi(Value); + else if (!strcasecmp(Name, "ShowReplayMode")) ShowReplayMode = atoi(Value); + else if (!strcasecmp(Name, "ResumeID")) ResumeID = atoi(Value); ++ else if (!strcasecmp(Name, "SourceCaps")) return ParseSourceCaps(Value); + else if (!strcasecmp(Name, "CurrentChannel")) CurrentChannel = atoi(Value); + else if (!strcasecmp(Name, "CurrentVolume")) CurrentVolume = atoi(Value); + else if (!strcasecmp(Name, "CurrentDolby")) CurrentDolby = atoi(Value); +@@ -523,6 +570,7 @@ + Store("MultiSpeedMode", MultiSpeedMode); + Store("ShowReplayMode", ShowReplayMode); + Store("ResumeID", ResumeID); ++ if (SourceCapsSet) StoreSourceCaps("SourceCaps"); + Store("CurrentChannel", CurrentChannel); + Store("CurrentVolume", CurrentVolume); + Store("CurrentDolby", CurrentDolby); +diff -ur vdr-1.3.33/config.h vdr-1.3.33+SourceCaps/config.h +--- vdr-1.3.33/config.h 2005-09-14 18:04:09.000000000 +0200 ++++ vdr-1.3.33+SourceCaps/config.h 2005-09-25 20:25:45.871496352 +0200 +@@ -30,6 +30,9 @@ + #define MINOSDHEIGHT 324 + #define MAXOSDHEIGHT 567 + ++#define MAXDEVICES 16 // the maximum number of devices in the system ++#define MAXSOURCECAPS 128 // the maximum number of different sources per device ++ + #define MaxFileName 256 + #define MaxSkinName 16 + #define MaxThemeName 16 +@@ -198,6 +201,8 @@ + void StoreLanguages(const char *Name, int *Values); + bool ParseLanguages(const char *Value, int *Values); + bool Parse(const char *Name, const char *Value); ++ void StoreSourceCaps(const char *Name); ++ bool ParseSourceCaps(const char *Value); + cSetupLine *Get(const char *Name, const char *Plugin = NULL); + void Store(const char *Name, const char *Value, const char *Plugin = NULL, bool AllowMultiple = false); + void Store(const char *Name, int Value, const char *Plugin = NULL); +@@ -252,6 +257,8 @@ + int MultiSpeedMode; + int ShowReplayMode; + int ResumeID; ++ int SourceCaps[MAXDEVICES][MAXSOURCECAPS]; ++ bool SourceCapsSet; + int CurrentChannel; + int CurrentVolume; + int CurrentDolby; +diff -ur vdr-1.3.33/device.c vdr-1.3.33+SourceCaps/device.c +--- vdr-1.3.33/device.c 2005-09-17 16:29:44.000000000 +0200 ++++ vdr-1.3.33+SourceCaps/device.c 2005-09-25 20:25:45.873496048 +0200 +@@ -174,8 +174,10 @@ + for (int i = 0; i < MAXRECEIVERS; i++) + receiver[i] = NULL; + +- if (numDevices < MAXDEVICES) ++ if (numDevices < MAXDEVICES) { + device[numDevices++] = this; ++ SetSourceCaps(cardIndex); ++ } + else + esyslog("ERROR: too many devices!"); + } +@@ -313,6 +315,17 @@ + return d; + } + ++void cDevice::SetSourceCaps(int Index) ++{ ++ for (int d = 0; d < numDevices; d++) { ++ if (Index < 0 || Index == device[d]->CardIndex()) { ++ for (int i = 0; i < MAXSOURCECAPS; i++) ++ device[d]->sourceCaps[i] = Setup.SourceCaps[device[d]->CardIndex()][i]; ++ } ++ } ++} ++ ++ + void cDevice::Shutdown(void) + { + primaryDevice = NULL; +diff -ur vdr-1.3.33/device.h vdr-1.3.33+SourceCaps/device.h +--- vdr-1.3.33/device.h 2005-09-17 16:29:28.000000000 +0200 ++++ vdr-1.3.33+SourceCaps/device.h 2005-09-25 20:25:45.874495896 +0200 +@@ -23,7 +23,6 @@ + #include "thread.h" + #include "tools.h" + +-#define MAXDEVICES 16 // the maximum number of devices in the system + #define MAXPIDHANDLES 64 // the maximum number of different PIDs per device + #define MAXRECEIVERS 16 // the maximum number of receivers per device + #define MAXVOLUME 255 +@@ -133,6 +132,8 @@ + ///< given Priority. + ///< See ProvidesChannel() for more information on how + ///< priorities are handled, and the meaning of NeedsDetachReceivers. ++ static void SetSourceCaps(int Index = -1); ++ ///< Sets the SourceCaps of the given device according to the Setup data. + static void Shutdown(void); + ///< Closes down all devices. + ///< Must be called at the end of the program. +@@ -140,6 +141,7 @@ + static int nextCardIndex; + int cardIndex; + protected: ++ int sourceCaps[MAXSOURCECAPS]; + cDevice(void); + virtual ~cDevice(); + virtual bool Ready(void); +diff -ur vdr-1.3.33/dvbdevice.c vdr-1.3.33+SourceCaps/dvbdevice.c +--- vdr-1.3.33/dvbdevice.c 2005-08-21 11:17:20.000000000 +0200 ++++ vdr-1.3.33+SourceCaps/dvbdevice.c 2005-09-25 20:25:45.876495592 +0200 +@@ -754,10 +754,17 @@ + bool cDvbDevice::ProvidesSource(int Source) const + { + int type = Source & cSource::st_Mask; +- return type == cSource::stNone +- || type == cSource::stCable && frontendType == FE_QAM +- || type == cSource::stSat && frontendType == FE_QPSK +- || type == cSource::stTerr && frontendType == FE_OFDM; ++ if (Setup.SourceCapsSet && type == cSource::stSat && frontendType == FE_QPSK) { ++ for (int i = 0; i < MAXSOURCECAPS; i++) ++ if (sourceCaps[i] == Source) ++ return true; ++ return false; ++ } ++ else ++ return type == cSource::stNone ++ || type == cSource::stCable && frontendType == FE_QAM ++ || type == cSource::stSat && frontendType == FE_QPSK ++ || type == cSource::stTerr && frontendType == FE_OFDM; + } + + bool cDvbDevice::ProvidesTransponder(const cChannel *Channel) const +--- vdr-1.3.23/sources.c 2004-12-26 12:58:52.000000000 +0100 ++++ vdr-1.3.23+SourceCaps/sources.c 2005-02-16 00:29:02.652355896 +0100 +@@ -68,7 +68,7 @@ + int pos = 0; + bool dot = false; + bool neg = false; +- while (*++s) { ++ while (*++s && !isblank(*s)) { + switch (toupper(*s)) { + case '0' ... '9': pos *= 10; + pos += *s - '0'; |