From 3630a9f78a7fdeaa08cfae078c29ca23d3ea4f3a Mon Sep 17 00:00:00 2001 From: Rolf Ahrenberg Date: Fri, 31 Oct 2014 18:18:33 +0200 Subject: [PATCH] Added a quirk to avoid addpids/delpids in PLAY commands. --- server.c | 23 ++++++++++++++--------- server.h | 1 + tuner.c | 2 +- 3 files changed, 16 insertions(+), 10 deletions(-) diff --git a/server.c b/server.c index e5dd525..37093b0 100644 --- a/server.c +++ b/server.c @@ -25,15 +25,19 @@ cSatipServer::cSatipServer(const char *addressP, const char *descriptionP, const memset(modelCountM, 0, sizeof(modelCountM)); if (isempty(*modelM)) modelM = "DVBS-1"; - // These devices contain a session id bug: - // Inverto Airscreen Server IDL 400 ? - // Telestar Digibit R1 ? - // Elgato EyeTV Netstream 4Sat ? - if (!isempty(*descriptionM) && - (strstr(*descriptionM, "GSSBOX") || // Grundig Sat Systems GSS.box DSI 400 - strstr(*descriptionM, "Triax SatIP Converter") // Triax TSS 400 - )) - quirkM |= eSatipQuirkSessionId; + if (!isempty(*descriptionM)) { + // These devices contain a session id bug: + // Inverto Airscreen Server IDL 400 ? + // Telestar Digibit R1 ? + // Elgato EyeTV Netstream 4Sat ? + if (strstr(*descriptionM, "GSSBOX") || // Grundig Sat Systems GSS.box DSI 400 + strstr(*descriptionM, "Triax SatIP Converter") // Triax TSS 400 + ) + quirkM |= eSatipQuirkSessionId; + // These devices contain a play (*pids) parameter bug: + if (strstr(*descriptionM, "fritzdvbc")) // Fritz!WLAN Repeater DVB-C + quirkM |= eSatipQuirkPlayPids; + } char *s, *p = strdup(*modelM); char *r = strtok_r(p, ",", &s); while (r) { @@ -73,6 +77,7 @@ cSatipServer::cSatipServer(const char *addressP, const char *descriptionP, const modelCountM[eSatipModuleDVBC] = atoi(++c); else modelCountM[eSatipModuleDVBC] = 1; + // Add model quirks here } r = strtok_r(NULL, ",", &s); } diff --git a/server.h b/server.h index d8d1db9..01c8ffc 100644 --- a/server.h +++ b/server.h @@ -33,6 +33,7 @@ public: enum eSatipQuirk { eSatipQuirkNone = 0x00, eSatipQuirkSessionId = 0x01, + eSatipQuirkPlayPids = 0x02, eSatipQuirkMask = 0x0F }; enum eSatipModelType { diff --git a/tuner.c b/tuner.c index 3a7ebe7..050a45d 100644 --- a/tuner.c +++ b/tuner.c @@ -459,7 +459,7 @@ bool cSatipTuner::UpdatePids(bool forceP) tunedM && handleM && !isempty(*streamAddrM) && (streamIdM > 0)) { CURLcode res = CURLE_OK; cString uri = cString::sprintf("rtsp://%s/stream=%d", *streamAddrM, streamIdM); - if (forceP) { + if (forceP || (currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkPlayPids))) { if (pidsM.Size()) { uri = cString::sprintf("%s?pids=", *uri); for (int i = 0; i < pidsM.Size(); ++i)