mux stop: pass the stop reason for OTA epggrab to avoid re-tuning on muxes with no data
This commit is contained in:
parent
abea248bab
commit
8174eb953d
6 changed files with 26 additions and 16 deletions
|
@ -192,7 +192,7 @@ epggrab_ota_done ( epggrab_ota_mux_t *om, int reason )
|
|||
om->om_q_type = EPGGRAB_OTA_MUX_IDLE;
|
||||
if (reason == EPGGRAB_OTA_DONE_STOLEN) {
|
||||
/* Do not requeue completed muxes */
|
||||
if (!om->om_done && om->om_requeue && mm->mm_scan_result != MM_SCAN_FAIL) {
|
||||
if (!om->om_done && om->om_requeue) {
|
||||
TAILQ_INSERT_HEAD(&epggrab_ota_pending, om, om_q_link);
|
||||
om->om_q_type = EPGGRAB_OTA_MUX_PENDING;
|
||||
} else {
|
||||
|
@ -295,15 +295,18 @@ epggrab_mux_start ( mpegts_mux_t *mm, void *p )
|
|||
}
|
||||
|
||||
static void
|
||||
epggrab_mux_stop ( mpegts_mux_t *mm, void *p )
|
||||
epggrab_mux_stop ( mpegts_mux_t *mm, void *p, int reason )
|
||||
{
|
||||
epggrab_ota_mux_t *ota;
|
||||
const char *uuid = idnode_uuid_as_str(&mm->mm_id);
|
||||
int done = EPGGRAB_OTA_DONE_STOLEN;
|
||||
|
||||
if (reason == SM_CODE_NO_INPUT)
|
||||
done = EPGGRAB_OTA_DONE_NO_DATA;
|
||||
tvhtrace("epggrab", "mux %p (%s) stop", mm, uuid);
|
||||
TAILQ_FOREACH(ota, &epggrab_ota_active, om_q_link)
|
||||
if (!strcmp(ota->om_mux_uuid, uuid)) {
|
||||
epggrab_ota_done(ota, EPGGRAB_OTA_DONE_STOLEN);
|
||||
epggrab_ota_done(ota, done);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -415,7 +415,7 @@ struct mpegts_mux
|
|||
void (*mm_display_name) (mpegts_mux_t*, char *buf, size_t len);
|
||||
int (*mm_is_enabled) (mpegts_mux_t *mm);
|
||||
int (*mm_start) (mpegts_mux_t *mm, mpegts_input_t *mi, const char *r, int w, int flags);
|
||||
void (*mm_stop) (mpegts_mux_t *mm, int force);
|
||||
void (*mm_stop) (mpegts_mux_t *mm, int force, int reason);
|
||||
void (*mm_open_table) (mpegts_mux_t*,mpegts_table_t*,int subscribe);
|
||||
void (*mm_close_table) (mpegts_mux_t*,mpegts_table_t*);
|
||||
void (*mm_create_instances) (mpegts_mux_t*);
|
||||
|
@ -913,7 +913,7 @@ typedef struct mpegts_listener
|
|||
LIST_ENTRY(mpegts_listener) ml_link;
|
||||
void *ml_opaque;
|
||||
void (*ml_mux_start) (mpegts_mux_t *mm, void *p);
|
||||
void (*ml_mux_stop) (mpegts_mux_t *mm, void *p);
|
||||
void (*ml_mux_stop) (mpegts_mux_t *mm, void *p, int reason);
|
||||
void (*ml_mux_create) (mpegts_mux_t *mm, void *p);
|
||||
void (*ml_mux_delete) (mpegts_mux_t *mm, void *p);
|
||||
} mpegts_listener_t;
|
||||
|
@ -933,6 +933,13 @@ LIST_HEAD(,mpegts_listener) mpegts_listeners;
|
|||
if (ml->op) ml->op(t, ml->ml_opaque);\
|
||||
} (void)0
|
||||
|
||||
#define mpegts_fire_event1(t, op, arg1)\
|
||||
{\
|
||||
mpegts_listener_t *ml;\
|
||||
LIST_FOREACH(ml, &mpegts_listeners, ml_link)\
|
||||
if (ml->op) ml->op(t, ml->ml_opaque, arg1);\
|
||||
} (void)0
|
||||
|
||||
/*
|
||||
* Misc
|
||||
*/
|
||||
|
|
|
@ -208,7 +208,7 @@ iptv_input_warm_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi )
|
|||
|
||||
/* Stop */
|
||||
if (s)
|
||||
s->mmi_mux->mm_stop(s->mmi_mux, 1);
|
||||
s->mmi_mux->mm_stop(s->mmi_mux, 1, SM_CODE_ABORTED);
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
|
|
@ -510,7 +510,7 @@ linuxdvb_frontend_monitor ( void *aux )
|
|||
|
||||
/* Disabled */
|
||||
if (!lfe->mi_enabled && mmi)
|
||||
mmi->mmi_mux->mm_stop(mmi->mmi_mux, 1);
|
||||
mmi->mmi_mux->mm_stop(mmi->mmi_mux, 1, SM_CODE_ABORTED);
|
||||
|
||||
/* Close FE */
|
||||
if (lfe->lfe_fe_fd > 0 && !mmi && lfe->lfe_powersave) {
|
||||
|
|
|
@ -133,7 +133,7 @@ mpegts_input_enabled_notify ( void *p )
|
|||
|
||||
/* Stop */
|
||||
LIST_FOREACH(mmi, &mi->mi_mux_active, mmi_active_link)
|
||||
mmi->mmi_mux->mm_stop(mmi->mmi_mux, 1);
|
||||
mmi->mmi_mux->mm_stop(mmi->mmi_mux, 1, SM_CODE_ABORTED);
|
||||
|
||||
/* Alert */
|
||||
if (mi->mi_enabled_updated)
|
||||
|
@ -382,7 +382,7 @@ mpegts_input_warm_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi )
|
|||
return 0;
|
||||
|
||||
/* Stop current */
|
||||
cur->mmi_mux->mm_stop(cur->mmi_mux, 1);
|
||||
cur->mmi_mux->mm_stop(cur->mmi_mux, 1, SM_CODE_SUBSCRIPTION_OVERRIDDEN);
|
||||
}
|
||||
if (LIST_FIRST(&mi->mi_mux_active))
|
||||
return SM_CODE_TUNING_FAILED;
|
||||
|
@ -540,7 +540,7 @@ mpegts_input_close_service ( mpegts_input_t *mi, mpegts_service_t *s )
|
|||
pthread_mutex_unlock(&mi->mi_output_lock);
|
||||
|
||||
/* Stop mux? */
|
||||
s->s_dvb_mux->mm_stop(s->s_dvb_mux, 0);
|
||||
s->s_dvb_mux->mm_stop(s->s_dvb_mux, 0, SM_CODE_OK);
|
||||
}
|
||||
|
||||
static void
|
||||
|
@ -1393,7 +1393,7 @@ mpegts_input_stop_all ( mpegts_input_t *mi )
|
|||
{
|
||||
mpegts_mux_instance_t *mmi;
|
||||
while ((mmi = LIST_FIRST(&mi->mi_mux_active)))
|
||||
mmi->mmi_mux->mm_stop(mmi->mmi_mux, 1);
|
||||
mmi->mmi_mux->mm_stop(mmi->mmi_mux, 1, SM_CODE_OK);
|
||||
}
|
||||
|
||||
void
|
||||
|
|
|
@ -427,7 +427,7 @@ mpegts_mux_class_enabled_notify ( void *p )
|
|||
{
|
||||
mpegts_mux_t *mm = p;
|
||||
if (!mm->mm_is_enabled(mm)) {
|
||||
mm->mm_stop(mm, 1);
|
||||
mm->mm_stop(mm, 1, SM_CODE_MUX_NOT_ENABLED);
|
||||
mpegts_network_scan_mux_cancel(mm, 0);
|
||||
}
|
||||
}
|
||||
|
@ -583,7 +583,7 @@ mpegts_mux_delete ( mpegts_mux_t *mm, int delconf )
|
|||
tvhinfo("mpegts", "%s (%p) - deleting", buf, mm);
|
||||
|
||||
/* Stop */
|
||||
mm->mm_stop(mm, 1);
|
||||
mm->mm_stop(mm, 1, SM_CODE_ABORTED);
|
||||
|
||||
/* Remove from network */
|
||||
LIST_REMOVE(mm, mm_network_link);
|
||||
|
@ -815,7 +815,7 @@ mpegts_mux_has_subscribers ( mpegts_mux_t *mm, const char *name )
|
|||
}
|
||||
|
||||
static void
|
||||
mpegts_mux_stop ( mpegts_mux_t *mm, int force )
|
||||
mpegts_mux_stop ( mpegts_mux_t *mm, int force, int reason )
|
||||
{
|
||||
char buf[256], *s;
|
||||
mpegts_mux_instance_t *mmi = mm->mm_active, *mmi2;
|
||||
|
@ -895,7 +895,7 @@ mpegts_mux_stop ( mpegts_mux_t *mm, int force )
|
|||
mpegts_network_scan_mux_cancel(mm, 1);
|
||||
|
||||
/* Events */
|
||||
mpegts_fire_event(mm, ml_mux_stop);
|
||||
mpegts_fire_event1(mm, ml_mux_stop, reason);
|
||||
|
||||
}
|
||||
|
||||
|
@ -1275,7 +1275,7 @@ mpegts_mux_remove_subscriber
|
|||
tvhtrace("mpegts", "%s - remove subscriber", buf);
|
||||
#endif
|
||||
subscription_unlink_mux(s, reason);
|
||||
mm->mm_stop(mm, 0);
|
||||
mm->mm_stop(mm, 0, reason);
|
||||
}
|
||||
|
||||
int
|
||||
|
|
Loading…
Add table
Reference in a new issue