mpegts: Added some new post start/stop routines to allow flexibility
This is required for DVB-S where the input object is actually acting as a proxy for the frontend.
This commit is contained in:
parent
46f24f67c7
commit
696fcf9751
3 changed files with 36 additions and 18 deletions
|
@ -395,6 +395,8 @@ struct mpegts_input
|
|||
void (*mi_create_mux_instance) (mpegts_input_t*,mpegts_mux_t*);
|
||||
const idclass_t *(*mi_network_class) (mpegts_input_t *mi);
|
||||
mpegts_network_t *(*mi_network_create) (mpegts_input_t *mi, htsmsg_t *c);
|
||||
void (*mi_started_mux) (mpegts_input_t*,mpegts_mux_instance_t*);
|
||||
void (*mi_stopped_mux) (mpegts_input_t*,mpegts_mux_instance_t*);
|
||||
};
|
||||
|
||||
#endif /* __TVH_MPEGTS_H__ */
|
||||
|
|
|
@ -164,6 +164,35 @@ mpegts_input_create_mux_instance
|
|||
(void)mpegts_mux_instance_create(mpegts_mux_instance, NULL, mi, mm);
|
||||
}
|
||||
|
||||
static void
|
||||
mpegts_input_started_mux
|
||||
( mpegts_input_t *mi, mpegts_mux_instance_t *mmi )
|
||||
{
|
||||
mmi->mmi_mux->mm_active = mmi;
|
||||
LIST_INSERT_HEAD(&mi->mi_mux_active, mmi, mmi_active_link);
|
||||
}
|
||||
|
||||
static void
|
||||
mpegts_input_stopped_mux
|
||||
( mpegts_input_t *mi, mpegts_mux_instance_t *mmi )
|
||||
{
|
||||
char buf[256];
|
||||
service_t *s, *t;
|
||||
mmi->mmi_mux->mm_active = NULL;
|
||||
LIST_REMOVE(mmi, mmi_mux_link);
|
||||
|
||||
mi->mi_display_name(mi, buf, sizeof(buf));
|
||||
tvhtrace("mpegts", "%s - flush subscribers", buf);
|
||||
s = LIST_FIRST(&mi->mi_transports);
|
||||
while (s) {
|
||||
t = s;
|
||||
s = LIST_NEXT(t, s_active_link);
|
||||
if (((mpegts_service_t*)s)->s_dvb_mux != mmi->mmi_mux)
|
||||
continue;
|
||||
service_remove_subscriber(s, NULL, SM_CODE_SUBSCRIPTION_OVERRIDDEN);
|
||||
}
|
||||
}
|
||||
|
||||
/* **************************************************************************
|
||||
* Data processing
|
||||
* *************************************************************************/
|
||||
|
@ -177,7 +206,7 @@ mpegts_input_recv_packets
|
|||
int len = l;
|
||||
int i = 0, table_wakeup = 0;
|
||||
mpegts_mux_t *mm = mmi->mmi_mux;
|
||||
assert(mmi->mmi_input == mi);
|
||||
//assert(mmi->mmi_input == mi);
|
||||
assert(mm != NULL);
|
||||
assert(name != NULL);
|
||||
|
||||
|
@ -335,6 +364,8 @@ mpegts_input_create0
|
|||
mi->mi_network_class = mpegts_input_network_class;
|
||||
mi->mi_network_create = mpegts_input_network_create;
|
||||
mi->mi_create_mux_instance = mpegts_input_create_mux_instance;
|
||||
mi->mi_started_mux = mpegts_input_started_mux;
|
||||
mi->mi_stopped_mux = mpegts_input_stopped_mux;
|
||||
|
||||
/* Index */
|
||||
mi->mi_instance = ++mpegts_input_idx;
|
||||
|
|
|
@ -78,9 +78,7 @@ mpegts_mux_instance_start ( mpegts_mux_instance_t **mmiptr )
|
|||
|
||||
/* Start */
|
||||
tvhdebug("mpegts", "%s - started", buf);
|
||||
LIST_INSERT_HEAD(&mmi->mmi_input->mi_mux_active, mmi,
|
||||
mmi_active_link);
|
||||
mm->mm_active = mmi;
|
||||
mmi->mmi_input->mi_started_mux(mmi->mmi_input, mmi);
|
||||
|
||||
/* Initial scanning */
|
||||
if (mm->mm_initial_scan_status == MM_SCAN_PENDING) {
|
||||
|
@ -263,7 +261,6 @@ static void
|
|||
mpegts_mux_stop ( mpegts_mux_t *mm )
|
||||
{
|
||||
char buf[256];
|
||||
service_t *s, *t;
|
||||
mpegts_mux_instance_t *mmi = mm->mm_active;
|
||||
mpegts_input_t *mi;
|
||||
|
||||
|
@ -273,19 +270,7 @@ mpegts_mux_stop ( mpegts_mux_t *mm )
|
|||
if (mmi) {
|
||||
mi = mmi->mmi_input;
|
||||
mi->mi_stop_mux(mi, mmi);
|
||||
mm->mm_active = NULL;
|
||||
LIST_REMOVE(mmi, mmi_active_link);
|
||||
|
||||
/* Flush all subscribers */
|
||||
tvhtrace("mpegts", "%s - flush subscribers", buf);
|
||||
s = LIST_FIRST(&mi->mi_transports);
|
||||
while (s) {
|
||||
t = s;
|
||||
s = LIST_NEXT(t, s_active_link);
|
||||
if (((mpegts_service_t*)s)->s_dvb_mux != mm)
|
||||
continue;
|
||||
service_remove_subscriber(s, NULL, SM_CODE_SUBSCRIPTION_OVERRIDDEN);
|
||||
}
|
||||
mi->mi_stopped_mux(mi, mmi);
|
||||
}
|
||||
|
||||
/* Flush all tables */
|
||||
|
|
Loading…
Add table
Reference in a new issue