tvheadend/support/pid-count.py
2015-03-30 17:03:56 +02:00

50 lines
1.1 KiB
Python
Executable file

#!/usr/bin/env python
#
# Very noddy script to count PIDs
#
import os, sys, time
# Stats
pids = {}
pids_cc = {}
pids_cc_err = {}
# Open file
fp = open(sys.argv[1])
while True:
tsb = fp.read(188)
while tsb and tsb[0] != '\x47':
tsb = tsb[1:] + fp.read(1)
print 'skip1'
if len(tsb) < 16:
break
tsb = map(ord, tsb[:16])
if tsb[0] != 0x47:
print 'sync err'
continue
# TODO: should re-sync
pid = ((tsb[1] & 0x1f) << 8) | tsb[2]
if pid not in pids:
pids[pid] = 1
else:
pids[pid] += 1
if pid == 0x1fff:
continue
cc = tsb[3]
if cc & 0x10:
cc &= 0x0f
if pid in pids_cc and pids_cc[pid] != cc:
print 'cc err 0x%x != 0x%x for pid %04X (%4d) %d' % (cc, pids_cc[pid], pid, pid, fp.tell())
if pid not in pids_cc_err:
pids_cc_err[pid] = 1
else:
pids_cc_err[pid] += 1
pids_cc[pid] = (cc + 1) & 0x0f
# Output
ks = pids.keys()
ks.sort()
for k in ks:
# if pids[k] <= int(sys.argv[2]): continue
print '%04X (%4d) - %d (err %d)' % (k, k, pids[k], k in pids_cc_err and pids_cc_err[k] or 0)