int mpegts_input_close_pid
( mpegts_input_t *mi, mpegts_mux_t *mm, int pid, int type, void *owner );
+mpegts_pid_t * mpegts_input_update_pid_weight
+ ( mpegts_input_t *mi, mpegts_mux_t *mm, int pid, int type, int weight,
+ void *owner );
+
void mpegts_input_close_pids
( mpegts_input_t *mi, mpegts_mux_t *mm, void *owner, int all );
return 0;
}
+mpegts_pid_t *
+mpegts_input_update_pid_weight
+ ( mpegts_input_t *mi, mpegts_mux_t *mm, int pid, int type, int weight,
+ void *owner )
+{
+ mpegts_pid_sub_t *mps, skel;
+ mpegts_pid_t *mp;
+ assert(owner != NULL);
+ lock_assert(&mi->mi_output_lock);
+ if (!(mp = mpegts_mux_find_pid(mm, pid, 0)))
+ return NULL;
+ if (pid == MPEGTS_FULLMUX_PID || pid == MPEGTS_TABLES_PID) {
+ LIST_FOREACH(mps, &mm->mm_all_subs, mps_svcraw_link)
+ if (mps->mps_owner == owner) break;
+ if (mps == NULL) return NULL;
+ tvhdebug(LS_MPEGTS, "%s - update PID %s weight %d subscription [%04x/%p]",
+ mm->mm_nicename, pid == MPEGTS_TABLES_PID ? "tables" : "fullmux",
+ weight, type, owner);
+ mps->mps_weight = weight;
+ } else {
+ skel.mps_type = type;
+ skel.mps_weight = -1;
+ skel.mps_owner = owner;
+ mps = RB_FIND(&mp->mp_subs, &skel, mps_link, mpegts_mps_cmp);
+ if (mps == NULL) return NULL;
+ tvhdebug(LS_MPEGTS, "%s - update PID %04X (%d) weight %d [%d/%p]",
+ mm->mm_nicename, mp->mp_pid, mp->mp_pid, weight, type, owner);
+ mps->mps_weight = weight;
+ mm->mm_update_pids_flag = 1;
+ }
+ return mp;
+}
+
elementary_stream_t *
mpegts_input_open_service_pid
( mpegts_input_t *mi, mpegts_mux_t *mm,
pi = &add.pids[i];
mpegts_input_open_pid(mi, mm, pi->pid, MPS_RAW, pi->weight, t, 0);
}
+ if (p) {
+ for (i = 0; i < p->count; i++) {
+ pi = &p->pids[i];
+ mpegts_input_update_pid_weight(mi, mm, pi->pid, MPS_RAW, pi->weight, t);
+ }
+ }
mpegts_pid_done(&add);
mpegts_pid_done(&del);
}