}
return 0;
}
+
+int channel_multi_services_active(const channel_t *ch)
+{
+ const idnode_list_mapping_t *ilm;
+ const service_t *service;
+ int cnt = 0;
+ if (!ch) return 0;
+ LIST_FOREACH(ilm, &ch->ch_services, ilm_in2_link) {
+ service = (const service_t*)ilm->ilm_in1;
+ if (service->s_enabled) {
+ if (++cnt > 1)
+ return 1;
+ }
+ }
+ return 0;
+}
channel_tag_t **channel_tag_get_sorted_list
( const char *sort_type, int *_count );
int channel_has_correct_service_filter(const channel_t *ch, int svf);
+int channel_multi_services_active(const channel_t *ch);
#endif /* CHANNELS_H */
#define MC_IS_EOS_ERROR(e) ((e) == EPIPE || (e) == ECONNRESET)
+#define MC_CAP_ANOTHER_SERVICE (1<<0) /* I can stream another service (SID must match!) */
+
typedef enum {
MC_UNKNOWN = 0,
MC_MATROSKA = 1,
int m_eos; /* End of stream */
int m_errors; /* Number of errors */
+ int m_caps; /* Capabilities */
muxer_config_t m_config; /* general configuration */
muxer_hints_t *m_hints; /* other hints */
} muxer_t;
dvb_table_parse_init(&pm->pm_eit, "pass-eit", LS_TBL_PASS, DVB_EIT_PID,
0, 0, pm);
+ if (pm->m_config.u.pass.m_rewrite_sid > 0)
+ pm->m_caps |= MC_CAP_ANOTHER_SERVICE;
+
return (muxer_t *)pm;
}
break;
case SMT_STOP:
+ if((mux->m_caps & MC_CAP_ANOTHER_SERVICE) != 0 &&
+ channel_multi_services_active(s->ths_channel))
+ break;
if(sm->sm_code != SM_CODE_SOURCE_RECONFIGURED) {
tvhwarn(LS_WEBUI, "Stop streaming %s, %s", hc->hc_url_orig,
streaming_code2txt(sm->sm_code));