iptv: rewrite iptv_input_is_free() - use per IPTV network limits, fixes #2780

This commit is contained in:
Jaroslav Kysela 2015-04-22 17:26:36 +02:00
parent 6a110d871b
commit d4160380a2

View file

@ -100,28 +100,23 @@ const idclass_t iptv_input_class = {
};
static int
iptv_input_is_free ( mpegts_input_t *mi )
iptv_input_is_free ( mpegts_input_t *mi, mpegts_mux_t *mm )
{
int c = 0;
mpegts_mux_instance_t *mmi;
mpegts_network_link_t *mnl;
iptv_network_t *in = (iptv_network_t *)mm->mm_network;
LIST_FOREACH(mmi, &mi->mi_mux_active, mmi_active_link)
c++;
if (mmi->mmi_mux->mm_network == (mpegts_network_t *)in)
c++;
/* Limit reached */
LIST_FOREACH(mnl, &mi->mi_networks, mnl_mi_link) {
iptv_network_t *in = (iptv_network_t*)mnl->mnl_network;
if (in->in_max_streams && c >= in->in_max_streams)
return 0;
}
if (in->in_max_streams && c >= in->in_max_streams)
return 0;
/* Bandwidth reached */
LIST_FOREACH(mnl, &mi->mi_networks, mnl_mi_link) {
iptv_network_t *in = (iptv_network_t*)mnl->mnl_network;
if (in->in_bw_limited)
if (in->in_bw_limited)
return 0;
}
return 1;
}
@ -134,7 +129,7 @@ iptv_input_get_weight ( mpegts_input_t *mi, mpegts_mux_t *mm, int flags )
const service_t *s;
/* Find the "min" weight */
if (!iptv_input_is_free(mi)) {
if (!iptv_input_is_free(mi, mm)) {
w = 1000000;
/* Service subs */
@ -183,7 +178,7 @@ iptv_input_warm_mux ( mpegts_input_t *mi, mpegts_mux_instance_t *mmi )
return 0;
/* Do we need to stop something? */
if (!iptv_input_is_free(mi)) {
if (!iptv_input_is_free(mi, mmi->mmi_mux)) {
pthread_mutex_lock(&mi->mi_output_lock);
mpegts_mux_instance_t *m, *s = NULL;
int w = 1000000;