#define MPS_WEIGHT_RAW 400
#define MPS_WEIGHT_NIT2 300
#define MPS_WEIGHT_SDT2 300
+#define MPS_WEIGHT_PMT_SCAN 100
int mps_weight;
void *mps_owner;
} mpegts_pid_sub_t;
#define MT_FULL 0x0002
#define MT_QUICKREQ 0x0004
#define MT_FASTSWITCH 0x0008
-#define MT_RECORD 0x0010
-#define MT_SKIPSUBS 0x0020
-#define MT_SCANSUBS 0x0040
-#define MT_FAST 0x0080
-#define MT_SLOW 0x0100
-#define MT_DEFER 0x0200
+#define MT_ONESHOT 0x0010
+#define MT_RECORD 0x0020
+#define MT_SKIPSUBS 0x0040
+#define MT_SCANSUBS 0x0080
+#define MT_FAST 0x0100
+#define MT_SLOW 0x0200
+#define MT_DEFER 0x0400
/**
* PID subscription weight
}
s->s_dvb_check_seen = dispatch_clock;
mpegts_table_add(mm, DVB_PMT_BASE, DVB_PMT_MASK, dvb_pmt_callback,
- NULL, "pmt", MT_CRC | MT_QUICKREQ | MT_SCANSUBS,
- pid, MPS_WEIGHT_PMT);
+ NULL, "pmt",
+ MT_CRC | MT_QUICKREQ | MT_ONESHOT | MT_SCANSUBS,
+ pid, MPS_WEIGHT_PMT_SCAN);
if (save)
service_request_save((service_t*)s, 1);
}
static void
-mpegts_table_fastswitch ( mpegts_mux_t *mm )
+mpegts_table_fastswitch ( mpegts_mux_t *mm, mpegts_table_t *mtm )
{
char buf[256];
mpegts_table_t *mt;
+ assert(mm == mtm->mt_mux);
+
if(mm->mm_scan_state != MM_SCAN_STATE_ACTIVE)
return;
return;
}
}
+ if (mtm->mt_flags & MT_ONESHOT)
+ mm->mm_close_table(mm, mtm);
pthread_mutex_unlock(&mm->mm_tables_lock);
mpegts_mux_nice_name(mm, buf, sizeof(buf));
mt->mt_count++;
if(!ret && mt->mt_flags & (MT_QUICKREQ|MT_FASTSWITCH))
- mpegts_table_fastswitch(mt->mt_mux);
+ mpegts_table_fastswitch(mt->mt_mux, mt);
}
void