GitHub
Moderator
[SoftCSA] Add HW-descrambler slot reset workaround
Some drivers (dm900) silently ignore CA_SET_PID(pid, -1) on service
stop, leaving the HW-descrambler slot active with stale CWs. The next
service then fails to start SoftCSA cleanly.
Add a new "Aggressive" choice (value 2) to config.softcsa.decoderRelease
that:
- pauses the HW decoder before clearing PIDs (same as Normal)
- opens /dev/dvb/adapter0/ca<demux> when leaving any encrypted service
and forces the slot down via CA_SET_PID(pid,-1) + CA_RESET, then
waits 200ms before the next tune
- bypasses the in-process CSA-ALT cache so each service runs its own
ECM-reader analysis (avoids audio race seen on dm900)
The CA_SET_PID/ca_pid kernel >= 4.14 fallback is moved from
descrambler.cpp into descrambler.h so it can be reused by the new
resetHwDescramblerSlot() in servicedvb.cpp.
Continue reading...
Some drivers (dm900) silently ignore CA_SET_PID(pid, -1) on service
stop, leaving the HW-descrambler slot active with stale CWs. The next
service then fails to start SoftCSA cleanly.
Add a new "Aggressive" choice (value 2) to config.softcsa.decoderRelease
that:
- pauses the HW decoder before clearing PIDs (same as Normal)
- opens /dev/dvb/adapter0/ca<demux> when leaving any encrypted service
and forces the slot down via CA_SET_PID(pid,-1) + CA_RESET, then
waits 200ms before the next tune
- bypasses the in-process CSA-ALT cache so each service runs its own
ECM-reader analysis (avoids audio race seen on dm900)
The CA_SET_PID/ca_pid kernel >= 4.14 fallback is moved from
descrambler.cpp into descrambler.h so it can be reused by the new
resetHwDescramblerSlot() in servicedvb.cpp.
Continue reading...