From 7f9d016b5248d2f0e5855f3fe8faf53a4849c5b8 Mon Sep 17 00:00:00 2001 From: Rolf Ahrenberg Date: Sun, 14 Dec 2014 17:54:37 +0200 Subject: [PATCH] Deduplicated pid listings. --- tuner.c | 32 +++++++------------------------- tuner.h | 11 ++++++++++- 2 files changed, 17 insertions(+), 26 deletions(-) diff --git a/tuner.c b/tuner.c index b3c10e2..361f49a 100644 --- a/tuner.c +++ b/tuner.c @@ -374,13 +374,7 @@ bool cSatipTuner::SetPid(int pidP, int typeP, bool onP) delPidsM.AddPid(pidP); addPidsM.RemovePid(pidP); } - if (pidsM.Size()) { - cString s = ""; - for (int i = 0; i < pidsM.Size(); ++i) - s = cString::sprintf("%s%d,", *s, pidsM[i]); - s = s.Truncate(-1); - debug9("%s (%d, %d, %d) pids=%s [device %d]", __PRETTY_FUNCTION__, pidP, typeP, onP, *s, deviceIdM); - } + debug9("%s (%d, %d, %d) pids=%s [device %d]", __PRETTY_FUNCTION__, pidP, typeP, onP, *pidsM.ListPids(), deviceIdM); pidUpdateCacheM.Set(ePidUpdateIntervalMs); sleepM.Signal(); @@ -395,28 +389,16 @@ bool cSatipTuner::UpdatePids(bool forceP) cString uri = cString::sprintf("rtsp://%s/stream=%d", *streamAddrM, streamIdM); bool usedummy = !!(currentServerM && currentServerM->Quirk(cSatipServer::eSatipQuirkPlayPids)); if (forceP || usedummy) { - if (pidsM.Size()) { - uri = cString::sprintf("%s?pids=", *uri); - for (int i = 0; i < pidsM.Size(); ++i) - uri = cString::sprintf("%s%d,", *uri, pidsM[i]); - uri = uri.Truncate(-1); - } + if (pidsM.Size()) + uri = cString::sprintf("%s?pids=%s", *uri, *pidsM.ListPids()); if (usedummy && (pidsM.Size() == 1) && (pidsM[0] < 0x20)) uri = cString::sprintf("%s,%d", *uri, eDummyPid); } else { - if (addPidsM.Size()) { - uri = cString::sprintf("%s?addpids=", *uri); - for (int i = 0; i < addPidsM.Size(); ++i) - uri = cString::sprintf("%s%d,", *uri, addPidsM[i]); - uri = uri.Truncate(-1); - } - if (delPidsM.Size()) { - uri = cString::sprintf("%s%sdelpids=", *uri, addPidsM.Size() ? "&" : "?"); - for (int i = 0; i < delPidsM.Size(); ++i) - uri = cString::sprintf("%s%d,", *uri, delPidsM[i]); - uri = uri.Truncate(-1); - } + if (addPidsM.Size()) + uri = cString::sprintf("%s?addpids=%s", *uri, *addPidsM.ListPids()); + if (delPidsM.Size()) + uri = cString::sprintf("%s%sdelpids=%s", *uri, addPidsM.Size() ? "&" : "?", *delPidsM.ListPids()); } if (!rtspM.Play(*uri)) return false; diff --git a/tuner.h b/tuner.h index cb26f90..a24d2be 100644 --- a/tuner.h +++ b/tuner.h @@ -42,7 +42,6 @@ public: Sort(PidCompare); } } - void AddPid(int pidP) { if (PidIndex(pidP) < 0) { @@ -50,6 +49,16 @@ public: Sort(PidCompare); } } + cString ListPids(void) + { + cString list = ""; + if (Size()) { + for (int i = 0; i < Size(); ++i) + list = cString::sprintf("%s%d,", *list, At(i)); + list = list.Truncate(-1); + } + return list; + } }; class cSatipTuner : public cThread, public cSatipTunerStatistics, public cSatipTunerIf