return strcmp(a->om_mux_uuid, b->om_mux_uuid);
}
+static int
+om_mux_cmp ( epggrab_ota_mux_t *a, epggrab_ota_mux_t *b )
+{
+ mpegts_mux_t *a1 = mpegts_mux_find(a->om_mux_uuid);
+ mpegts_mux_t *b1 = mpegts_mux_find(b->om_mux_uuid);
+ assert(a1);
+ assert(b1);
+ return mpegts_mux_compare(a1, b1);
+}
+
static int
om_svcl_cmp ( epggrab_ota_svc_link_t *a, epggrab_ota_svc_link_t *b )
{
om->om_requeue = 1;
if (om->om_q_type != EPGGRAB_OTA_MUX_IDLE)
return 0;
- TAILQ_INSERT_TAIL(&epggrab_ota_pending, om, om_q_link);
+ TAILQ_INSERT_SORTED(&epggrab_ota_pending, om, om_q_link, om_mux_cmp);
om->om_q_type = EPGGRAB_OTA_MUX_PENDING;
return 1;
}
ota = epggrab_ota_mux_skel;
SKEL_USED(epggrab_ota_mux_skel);
ota->om_mux_uuid = strdup(uuid);
- TAILQ_INSERT_TAIL(&epggrab_ota_pending, ota, om_q_link);
+ TAILQ_INSERT_SORTED(&epggrab_ota_pending, ota, om_q_link, om_mux_cmp);
ota->om_q_type = EPGGRAB_OTA_MUX_PENDING;
if (TAILQ_FIRST(&epggrab_ota_pending) == ota)
epggrab_ota_kick(1);
void mpegts_mux_update_pids ( mpegts_mux_t *mm );
+int mpegts_mux_compare ( mpegts_mux_t *a, mpegts_mux_t *b );
+
void mpegts_input_recv_packets
(mpegts_input_t *mi, mpegts_mux_instance_t *mmi, sbuf_t *sb,
int flags, mpegts_pcr_t *pcr);
return mp;
}
+/* **************************************************************************
+ * Misc
+ * *************************************************************************/
+
+int
+mpegts_mux_compare ( mpegts_mux_t *a, mpegts_mux_t *b )
+{
+ int r = uuid_cmp(&a->mm_network->mn_id.in_uuid,
+ &b->mm_network->mn_id.in_uuid);
+ if (r)
+ return r;
+ if (idnode_is_instance(&a->mm_id, &dvb_mux_dvbs_class) &&
+ idnode_is_instance(&b->mm_id, &dvb_mux_dvbs_class)) {
+ dvb_mux_conf_t *mc1 = &((dvb_mux_t *)a)->lm_tuning;
+ dvb_mux_conf_t *mc2 = &((dvb_mux_t *)b)->lm_tuning;
+ assert(mc1->dmc_fe_type == DVB_TYPE_S);
+ assert(mc2->dmc_fe_type == DVB_TYPE_S);
+ r = (int)mc1->u.dmc_fe_qpsk.polarisation -
+ (int)mc2->u.dmc_fe_qpsk.polarisation;
+ if (r == 0)
+ r = mc1->dmc_fe_freq - mc2->dmc_fe_freq;
+ }
+ return r;
+}
+
/******************************************************************************
* Editor Configuration
*
mm_cmp ( mpegts_mux_t *a, mpegts_mux_t *b )
{
int r = b->mm_scan_weight - a->mm_scan_weight;
- if (r == 0) {
- r = uuid_cmp(&a->mm_network->mn_id.in_uuid,
- &b->mm_network->mn_id.in_uuid);
- if (r)
- return r;
- if (idnode_is_instance(&a->mm_id, &dvb_mux_dvbs_class) &&
- idnode_is_instance(&b->mm_id, &dvb_mux_dvbs_class)) {
- dvb_mux_conf_t *mc1 = &((dvb_mux_t *)a)->lm_tuning;
- dvb_mux_conf_t *mc2 = &((dvb_mux_t *)b)->lm_tuning;
- assert(mc1->dmc_fe_type == DVB_TYPE_S);
- assert(mc2->dmc_fe_type == DVB_TYPE_S);
- r = (int)mc1->u.dmc_fe_qpsk.polarisation -
- (int)mc2->u.dmc_fe_qpsk.polarisation;
- if (r == 0)
- r = mc1->dmc_fe_freq - mc2->dmc_fe_freq;
- }
- }
+ if (r == 0)
+ return mpegts_mux_compare(a, b);
return r;
}