mpegts network idlescan: fix behaviour, add more documentation, fixes #2422
This commit is contained in:
parent
ab810bb517
commit
ffbc62a0ee
5 changed files with 35 additions and 14 deletions
|
@ -58,7 +58,9 @@ Buttons have the following functions:
|
|||
<dd>Don't scan this network for muxes at Tvheadend start.
|
||||
<p>
|
||||
<dt><b>Idle Scan Muxes</b>
|
||||
<dd>When nothing else happens Tvheadend will continuously rotate among all muxes and tune to them to verify that they are still working. If your adapter have problems with lots of tuning, try to disable this.
|
||||
<dd>When nothing else happens Tvheadend will continuously rotate among all muxes and tune to them to verify that they are still working
|
||||
when the inputs are not used for streaming. If your adapter have problems with lots of (endless) tuning, try to disable this.
|
||||
Note that this option should be OFF for the normal operation. This type of mux probing is not required.
|
||||
<p>
|
||||
<dt><b>Ignore Provider's Channel Numbers</b>
|
||||
<dd>Some providers will try to set a channel number so that every receiver is consistent - "tune to Channel x on 150". This option allows you to ignore this and let tvhheadend allocate a channel number itself.
|
||||
|
|
|
@ -275,7 +275,7 @@ mpegts_mux_class_scan_state_set ( void *o, const void *p )
|
|||
return 0;
|
||||
|
||||
/* Start */
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_USER);
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_USER, 0);
|
||||
|
||||
/* Stop */
|
||||
} else if (state == MM_SCAN_STATE_IDLE) {
|
||||
|
@ -734,9 +734,6 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force )
|
|||
|
||||
/* Scanning */
|
||||
mpegts_network_scan_mux_cancel(mm, 1);
|
||||
if (mm->mm_scan_state == MM_SCAN_STATE_IDLE &&
|
||||
mm->mm_network->mn_idlescan)
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_IDLE);
|
||||
|
||||
/* Events */
|
||||
mpegts_fire_event(mm, ml_mux_stop);
|
||||
|
@ -982,9 +979,9 @@ mpegts_mux_create0
|
|||
|
||||
/* Initial scan */
|
||||
if (mm->mm_scan_result == MM_SCAN_NONE || !mn->mn_skipinitscan)
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_INIT);
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_INIT, 10);
|
||||
else if (mm->mm_network->mn_idlescan)
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_IDLE);
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_IDLE, 10);
|
||||
|
||||
mpegts_mux_nice_name(mm, buf, sizeof(buf));
|
||||
tvhtrace("mpegts", "%s - created", buf);
|
||||
|
|
|
@ -118,7 +118,7 @@ mpegts_network_class_idlescan_notify ( void *p )
|
|||
mpegts_mux_t *mm;
|
||||
LIST_FOREACH(mm, &mn->mn_muxes, mm_network_link) {
|
||||
if (mn->mn_idlescan)
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_IDLE);
|
||||
mpegts_network_scan_queue_add(mm, SUBSCRIPTION_PRIO_SCAN_IDLE, 0);
|
||||
else if (mm->mm_scan_state == MM_SCAN_STATE_PEND &&
|
||||
mm->mm_scan_weight == SUBSCRIPTION_PRIO_SCAN_IDLE)
|
||||
mpegts_network_scan_queue_del(mm);
|
||||
|
|
|
@ -95,8 +95,26 @@ static inline void
|
|||
mpegts_network_scan_mux_done0
|
||||
( mpegts_mux_t *mm, mpegts_mux_scan_result_t result, int weight )
|
||||
{
|
||||
mpegts_network_t *mn = mm->mm_network;
|
||||
|
||||
mpegts_mux_unsubscribe_by_name(mm, "scan");
|
||||
mpegts_network_scan_queue_del(mm);
|
||||
if (mm->mm_scan_state == MM_SCAN_STATE_PEND) {
|
||||
if (weight || mn->mn_idlescan) {
|
||||
if (!weight)
|
||||
mm->mm_scan_weight = SUBSCRIPTION_PRIO_SCAN_IDLE;
|
||||
TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link);
|
||||
TAILQ_INSERT_SORTED_R(&mn->mn_scan_pend, mpegts_mux_queue,
|
||||
mm, mm_scan_link, mm_cmp);
|
||||
gtimer_arm(&mn->mn_scan_timer, mpegts_network_scan_timer_cb, mn, 10);
|
||||
weight = 0;
|
||||
} else {
|
||||
mpegts_network_scan_queue_del(mm);
|
||||
}
|
||||
} else {
|
||||
if (!weight && mn->mn_idlescan)
|
||||
weight = SUBSCRIPTION_PRIO_SCAN_IDLE;
|
||||
mpegts_network_scan_queue_del(mm);
|
||||
}
|
||||
|
||||
if (result != MM_SCAN_NONE && mm->mm_scan_result != result) {
|
||||
mm->mm_scan_result = result;
|
||||
|
@ -105,7 +123,7 @@ mpegts_network_scan_mux_done0
|
|||
|
||||
/* Re-enable? */
|
||||
if (weight > 0)
|
||||
mpegts_network_scan_queue_add(mm, weight);
|
||||
mpegts_network_scan_queue_add(mm, weight, 10);
|
||||
}
|
||||
|
||||
/* Failed - couldn't start */
|
||||
|
@ -161,11 +179,15 @@ void
|
|||
mpegts_network_scan_queue_del ( mpegts_mux_t *mm )
|
||||
{
|
||||
mpegts_network_t *mn = mm->mm_network;
|
||||
char buf[256], buf2[256];
|
||||
if (mm->mm_scan_state == MM_SCAN_STATE_ACTIVE) {
|
||||
TAILQ_REMOVE(&mn->mn_scan_active, mm, mm_scan_link);
|
||||
} else if (mm->mm_scan_state == MM_SCAN_STATE_PEND) {
|
||||
TAILQ_REMOVE(&mn->mn_scan_pend, mm, mm_scan_link);
|
||||
}
|
||||
mpegts_mux_nice_name(mm, buf, sizeof(buf));
|
||||
mn->mn_display_name(mn, buf2, sizeof(buf2));
|
||||
tvhdebug("mpegts", "%s - removing mux %s from scan queue", buf2, buf);
|
||||
mm->mm_scan_state = MM_SCAN_STATE_IDLE;
|
||||
mm->mm_scan_weight = 0;
|
||||
gtimer_disarm(&mm->mm_scan_timeout);
|
||||
|
@ -174,7 +196,7 @@ mpegts_network_scan_queue_del ( mpegts_mux_t *mm )
|
|||
}
|
||||
|
||||
void
|
||||
mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight )
|
||||
mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight, int delay )
|
||||
{
|
||||
int reload = 0;
|
||||
char buf[256], buf2[256];;
|
||||
|
@ -202,14 +224,14 @@ mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight )
|
|||
|
||||
mpegts_mux_nice_name(mm, buf, sizeof(buf));
|
||||
mn->mn_display_name(mn, buf2, sizeof(buf2));
|
||||
tvhdebug("mpegts", "%s - adding mux %s to queue weight %d",
|
||||
tvhdebug("mpegts", "%s - adding mux %s to scan queue weight %d",
|
||||
buf2, buf, weight);
|
||||
|
||||
/* Add new entry */
|
||||
mm->mm_scan_state = MM_SCAN_STATE_PEND;
|
||||
TAILQ_INSERT_SORTED_R(&mn->mn_scan_pend, mpegts_mux_queue,
|
||||
mm, mm_scan_link, mm_cmp);
|
||||
gtimer_arm(&mn->mn_scan_timer, mpegts_network_scan_timer_cb, mn, 0);
|
||||
gtimer_arm(&mn->mn_scan_timer, mpegts_network_scan_timer_cb, mn, delay);
|
||||
mpegts_network_scan_notify(mm);
|
||||
}
|
||||
|
||||
|
|
|
@ -33,7 +33,7 @@ void mpegts_network_scan_timer_cb ( void *p );
|
|||
/*
|
||||
* Registration functions
|
||||
*/
|
||||
void mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight );
|
||||
void mpegts_network_scan_queue_add ( mpegts_mux_t *mm, int weight, int delay );
|
||||
void mpegts_network_scan_queue_del ( mpegts_mux_t *mm );
|
||||
|
||||
/*
|
||||
|
|
Loading…
Add table
Reference in a new issue