(mpegts_mux_t*, uint16_t sid, uint16_t pmt_pid);
const idclass_t* (*mn_mux_class) (mpegts_network_t*);
mpegts_mux_t * (*mn_mux_create2) (mpegts_network_t *mn, htsmsg_t *conf);
- void (*mn_scan) (mpegts_network_t*);
+ void (*mn_scan) (mpegts_network_t*);
/*
* Configuration
mpegts_mux_create0(calloc(1, sizeof(mpegts_mux_t)), &mpegts_mux_class, uuid,\
mn, onid, tsid, conf)
+mpegts_mux_t *mpegts_mux_post_create(mpegts_mux_t *mm);
+
static inline mpegts_mux_t *mpegts_mux_find0(tvh_uuid_t *uuid)
{ return idnode_find0(uuid, &mpegts_mux_class, NULL); }
iptv_input_t *mi2;
iptv_network_t *in = (iptv_network_t *)mm->mm_network;
iptv_thread_pool_t *pool;
-
+
TAILQ_FOREACH(pool, &iptv_tpool, link) {
mi2 = pool->input;
pthread_mutex_lock(&mi2->mi_output_lock);
iptv_network_create_mux2
( mpegts_network_t *mn, htsmsg_t *conf )
{
- return (mpegts_mux_t*)iptv_mux_create0((iptv_network_t*)mn, NULL, conf);
+ iptv_mux_t *im = iptv_mux_create0((iptv_network_t*)mn, NULL, conf);
+ return mpegts_mux_post_create((mpegts_mux_t *)im);
}
static void
( const char *uuid, htsmsg_t *conf, const idclass_t *idc )
{
iptv_network_t *in = calloc(1, sizeof(*in));
+ iptv_mux_t *im;
htsmsg_t *c;
char ubuf[UUID_HEX_SIZE];
HTSMSG_FOREACH(f, c) {
if (!(e = htsmsg_get_map_by_field(f))) continue;
if (!(e = htsmsg_get_map(e, "config"))) continue;
- iptv_mux_create0(in, f->hmf_name, e);
+ im = iptv_mux_create0(in, f->hmf_name, e);
+ mpegts_mux_post_create((mpegts_mux_t *)im);
}
htsmsg_destroy(c);
}
iptv_network_builder
( const idclass_t *idc, htsmsg_t *conf )
{
- return (mpegts_network_t*)iptv_network_create0(NULL, conf, idc);
+ mpegts_network_t *mn;
+ iptv_thread_pool_t *pool;
+
+ mn = (mpegts_network_t *)iptv_network_create0(NULL, conf, idc);
+ TAILQ_FOREACH(pool, &iptv_tpool, link)
+ mpegts_input_add_network((mpegts_input_t *)pool->input, mn);
+ return mn;
}
/* **************************************************************************
htsmsg_add_s32(conf, "spriority", smuxprio);
im = iptv_mux_create0(in, NULL, conf);
+ mpegts_mux_post_create((mpegts_mux_t *)im);
htsmsg_destroy(conf);
if (im) {
( mpegts_mux_t *mm, const idclass_t *class, const char *uuid,
mpegts_network_t *mn, uint16_t onid, uint16_t tsid, htsmsg_t *conf )
{
- char buf[256];
-
if (idnode_insert(&mm->mm_id, uuid, class, 0)) {
if (uuid)
tvherror(LS_MPEGTS, "invalid mux uuid '%s'", uuid);
if (conf)
idnode_load(&mm->mm_id, conf);
+ return mm;
+}
+
+mpegts_mux_t *
+mpegts_mux_post_create ( mpegts_mux_t *mm )
+{
+ mpegts_network_t *mn;
+ char buf[256];
+
+ if (mm == NULL)
+ return NULL;
+
+ mn = mm->mm_network;
if (mm->mm_enabled == MM_IGNORE)
mm->mm_scan_result = MM_SCAN_IGNORE;
+ mpegts_mux_nice_name(mm, buf, sizeof(buf));
+ tvhtrace(LS_MPEGTS, "%s - created", buf);
+ mm->mm_nicename = strdup(buf);
+
/* 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_IDLE,
SUBSCRIPTION_IDLESCAN, 10);
- mpegts_mux_nice_name(mm, buf, sizeof(buf));
- tvhtrace(LS_MPEGTS, "%s - created", buf);
- mm->mm_nicename = strdup(buf);
-
return mm;
}
htsmsg_t *c, *c2, *e;
htsmsg_field_t *f;
dvb_fe_delivery_system_t delsys;
- char buf[512];
char ubuf1[UUID_HEX_SIZE];
char ubuf2[UUID_HEX_SIZE];
lm->mm_display_name = dvb_mux_display_name;
lm->mm_config_save = dvb_mux_config_save;
- mpegts_mux_nice_name(mm, buf, sizeof(buf));
- free(mm->mm_nicename);
- mm->mm_nicename = strdup(buf);
-
/* No config */
if (!conf) return lm;
if (!(mm = dvb_network_find_mux(ln, dmc, MPEGTS_ONID_NONE, MPEGTS_TSID_NONE, 0, 0))) {
mm = dvb_mux_create0(ln, MPEGTS_ONID_NONE, MPEGTS_TSID_NONE,
dmc, NULL, NULL);
- if (mm)
+ if (mm) {
+ mpegts_mux_post_create((mpegts_mux_t *)mm);
idnode_changed(&mm->mm_id);
+ }
if (tvhtrace_enabled()) {
char buf[128];
dvb_mux_conf_str(dmc, buf, sizeof(buf));
}
if (save) {
mm = dvb_mux_create0(ln, onid, tsid, dmc, NULL, NULL);
+ mpegts_mux_post_create((mpegts_mux_t *)mm);
if (tvhtrace_enabled()) {
char buf[128];
dvb_mux_conf_str(&((dvb_mux_t *)mm)->lm_tuning, buf, sizeof(buf));
( mpegts_network_t *mn, htsmsg_t *conf )
{
dvb_network_t *ln = (dvb_network_t*)mn;
- return (mpegts_mux_t*)
- dvb_mux_create0(ln, MPEGTS_ONID_NONE, MPEGTS_TSID_NONE,
- NULL, NULL, conf);
+ dvb_mux_t *mm;
+ mm = dvb_mux_create0(ln, MPEGTS_ONID_NONE, MPEGTS_TSID_NONE,
+ NULL, NULL, conf);
+ return mpegts_mux_post_create((mpegts_mux_t *)mm);
}
/* ****************************************************************************
( const char *uuid, const idclass_t *idc, htsmsg_t *conf )
{
dvb_network_t *ln;
+ dvb_mux_t *lm;
htsmsg_t *c, *e;
htsmsg_field_t *f;
const char *s;
HTSMSG_FOREACH(f, c) {
if (!(e = htsmsg_get_map_by_field(f))) continue;
if (!(e = htsmsg_get_map(e, "config"))) continue;
- (void)dvb_mux_create1(ln, f->hmf_name, e);
+ lm = dvb_mux_create1(ln, f->hmf_name, e);
+ mpegts_mux_post_create((mpegts_mux_t *)lm);
}
htsmsg_destroy(c);
}
mux, NULL, NULL);
if (mm) {
char buf[256];
+ mpegts_mux_post_create(mm);
idnode_changed(&mm->mm_id);
mn->mn_display_name(mn, buf, sizeof(buf));
tvhinfo(LS_MPEGTS, "fastscan mux add to network '%s'", buf);
/* Create logical instance */
mm = tsfile_mux_create(uuid, tsfile_network);
mm->mm_tsid_accept_zero_value = 1;
+ mpegts_mux_post_create(mm);
/* Create physical instance (for each tuner) */
LIST_FOREACH(mi, &tsfile_inputs, tsi_link)