This is particularly important for null susbcriptions that receive no
stream data and therefore handle the SMT_STOP inline (actually was
direct before). This causes list corruption, therefore these subs
are now stored to a secondary list that are cleaned up within the
standard rescheduler.
THe problem is that mux subs have been done such that unsubscribe
(which in turn calls subs_reschedule()) can itelf be called in line
from subs_reschedule().
Really this is a bit of a mess but this simple hack fixes things.
I've made the table extraid 64 bits, as some entries require 32+X bits
so a 32-bit field wasn't enough.
Added callback for registering destruction (for dealloc'ing memory
alloc'd for opaque).
Added method of registering desciptor tag handlers, saves duplicating
BAT processing used for OpenTV, which uses 1 custom descriptor.
Improved the table completion detection and reduced level of debug
that could swamp tvhlog queue.
If processing because so high that the log queue becomes swamped we can
end up with a sort of avalanche scenario where everything gradually slows
down and the size of the buffer continues to grow. The main culprits of
this have been eliminated at source, however this is still a useful
safe guard.
The processing performed in the hexdump routine, commonly used in
SI table trace output. Was having a significant impact on performance
as it was not pre-processing the config to see if trace was even
enabled before continuing to build up the (large and frequent) hex
strings.
It's a bit ugly to link subs and mpegts directly, but its not the end
of the world (and probably unavoidable without lots of duplication).
I'm still not convinced its robust to mux deletions if subs exist on
that mux. Probably needs mmi to be ref counted.
There is also a special kind of sub that expects to receive no stream
data, i.e. all data will come from the SI tables only. This special
sub is automatically unsubscribed (but that might need changing).
Note: I think my thinking for needing this logging thread is possibly
no longer valid. So this might be removed at some point (or at least
made optional).
This attmepts to rebuild the DVB network (not including satconf/adapters)
and also the channel list. This is 90+% of the work and should be enough
for most users to get up and running a bit more quickly.
Still haven't touched OpenTV and there are several hacks in here for which
a proper solution is required.
(cherry picked from commit 9212120eb4c92aacb0d9cb75624961bf27e2ef5a)
I thought this was causing stale data to enter the pipelines, turns
out this was not the case (it was just a NIT entry for a mux that
didn't exist colliding with one that did).
However still a useful mod.
(cherry picked from commit a7c7b76e8f8f10ece3af3132964c8afd19b26391)
This is necessary so that things like EPG grabbing can make
subscriptions that take precedence over initial scan but not
over standard subscriptions.
Will also be used for the debug mux dump from UI feature.
(cherry picked from commit 35a58bdf85008b819504e86e26f1072f79e79af3)
I'm hoping this will give a small performance boost with heavy levels
of trace. This is because I'm finding that data appears to be missing
when testing EIT, but to test I need to enable debug and I think that
debug may be part of the problem!
(cherry picked from commit d59421f91896fe30cd6ba6507f90ad0766903ae3)
I had forgotten to make the read() buffers mux specific. Without this they
effectively end up using the same buffer for all active sessions and will
trample all over each other!