iptv: rewrite iptv_input_is_free() - use per IPTV network limits, fixes #2780
This commit is contained in:
parent
6a110d871b
commit
d4160380a2
1 changed files with 9 additions and 14 deletions
|
@ -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;
|
||||
|
|
Loading…
Add table
Reference in a new issue