You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
🤖 AI: An index of measured findings and candidate improvements against Jamulus that were not yet filed as issues, kept current so maintainers can pull whichever ones are worth a proper write-up. Nothing here needs a reply beyond "yes, open an issue for N" (or "no, not interested"). Each line is one command away from a standalone issue with the evidence, harness, and reproduce steps behind it. Status as of 2026-09-11, checked against main at 292506eb.
None of this is a new PR, it is a menu. If one of these turns into code later, it goes through the usual contribution process.
Filed since this index was posted (2026-08-21)
#3923 auto jitter buffer hysteresis compares against a constant (split out of this thread, open)
The auto sizer throws away the one distinction that decides which lever helps. Not filed. It collapses every failure into a single scalar error rate, so it cannot tell late-but-complete arrivals (where more depth helps) from independent loss (where depth is wasted). A cheap run-length signal already computable inside CNetBuf::Get separates the two regimes cleanly in recorded traces. This is a design conversation, not a patch.
Server performance
The --multithreading pool-size default may be wrong. Not filed; still hoffie's own unanswered checkbox on #2446. On bare metal at realistic client counts, NUM_CORES-1 beats the shipped idealThreadCount(); and idealThreadCount() ignores CPU affinity on Qt5, so taskset does not resize the pool. The rule inverts on two-core hosts, so a naive idealThreadCount()-1 would regress them; any change has to floor or stay configurable.
#1591 (scrollbar resets on mute toggle) is still live on current main, localized to lblGlobalInfoLabel show/hide reflowing the mixer's QScrollArea. Milestone 4.1.0; pljones's note above stands: verify on all platforms and under Qt 6 before a fix.
#3604 (dedup the client/server "check for update" code) and #2438 (setChannelName written in two places with divergent truncation) both have small, verified refactor scopes ready to implement. Both open, milestone 4.1.0.
If any of these are worth pursuing, name it and a focused issue with the full evidence follows. Pointers to overlapping open issues or PRs are welcome.
🤖 This message was written by AI and reviewed by @mcfnord.
🤖 AI: An index of measured findings and candidate improvements against Jamulus that were not yet filed as issues, kept current so maintainers can pull whichever ones are worth a proper write-up. Nothing here needs a reply beyond "yes, open an issue for N" (or "no, not interested"). Each line is one command away from a standalone issue with the evidence, harness, and reproduce steps behind it. Status as of 2026-09-11, checked against
mainat292506eb.None of this is a new PR, it is a menu. If one of these turns into code later, it goes through the usual contribution process.
Filed since this index was posted (2026-08-21)
OPUS_SET_PACKET_LOSS_PERC(Discussion, open)setRecordingDirectoryacknowledges a bad path while disabling recording (open)customdirectoryindexstartup crash, #3932bIsIdentifiedmade atomic, #3943setSkillLevelwithnullreturnsok, #3861 JSON-RPC read-buffer andsetWelcomeMessagebounds.JSON-RPC
countryNameis documented as a number but emits a string;getChannelInfodocuments aresult.idfield no revision has ever emitted (the handler's own comment says why);skillLevelis documented twice. Root cause is structural: CI regenerates the docs from the markers, so the markers are never checked against what the code emits.privateChatMessagerejects overlong input, and since JSON-RPC: bound the per-connection read buffer so unterminated input cannot exhaust memory #3861setWelcomeMessagerejects too instead of silently truncating;setServerNameandbroadcastChatMessageremain unbounded.Auto jitter buffer (all in corrados's #545 territory)
iCurDecidedResultis assigned only inInit()and passed toDecideWithHysteresis()by value, so the "previous decision" it compares against is a frozen constant for the life of every connection. None of the three candidate behaviours (leave it frozen, delete it, or write the decision back) is free, and they differ in both latency and how often the size moves, so this is a design question rather than a cleanup.CNetBuf::Getseparates the two regimes cleanly in recorded traces. This is a design conversation, not a patch.Server performance
--multithreadingpool-size default may be wrong. Not filed; still hoffie's own unanswered checkbox on #2446. On bare metal at realistic client counts,NUM_CORES-1beats the shippedidealThreadCount(); andidealThreadCount()ignores CPU affinity on Qt5, sotasksetdoes not resize the pool. The rule inverts on two-core hosts, so a naiveidealThreadCount()-1would regress them; any change has to floor or stay configurable.GetGain/GetPanlocking is ann0see's ann0see/jamulus#293 (draft), completed by ann0see/jamulus#320; the per-pair fade-in read is Server: compute the fade-in gain once per channel per frame, not once per channel pair #3945. The remaining candidate is a loop-interchange/vectorization rewrite that measured bit-identical to current output. It only matters on a busy (tens-of-clients) server and does nothing for a small jam, and it is the largest restructuring in the mix path, so it needs a design nod before any code.Codec
OPUS_SET_PACKET_LOSS_PERC(35)is a fixed point on a tradeoff that is measured on both sides. Now Discussion Adaptive OPUS_SET_PACKET_LOSS_PERC for OPUS64 instead of the hardcoded 35 #3924. It costs clean-line quality but buys real robustness under loss and jitter; both halves are quantified across the shipped quality tiers. A loss-adaptive value is the code-change candidate, but whether the clean-line cost is worth trading is a maintainer call.Already-open issues re-verified with a root cause
main, localized tolblGlobalInfoLabelshow/hide reflowing the mixer'sQScrollArea. Milestone 4.1.0; pljones's note above stands: verify on all platforms and under Qt 6 before a fix.setChannelNamewritten in two places with divergent truncation) both have small, verified refactor scopes ready to implement. Both open, milestone 4.1.0.If any of these are worth pursuing, name it and a focused issue with the full evidence follows. Pointers to overlapping open issues or PRs are welcome.
🤖 This message was written by AI and reviewed by @mcfnord.