www.pudn.com > streamrtp.rar > rtpsources.c
/*------------------------------------------------------------------------- * rtpsources.c - rtpsources *------------------------------------------------------------------------- */ #include#include #include /*------------------------------------------------------------------------- * rtpsources - fill array sources with a list of synchronization sources * participating in the session and return list's length. * Maxsources gives the size of the area pointed to by sources in * sizeof(ssrc_t) (short) units. *------------------------------------------------------------------------- */ int rtpsources(struct session *psn, ssrc_t *sources, int maxsources) { struct htent **v; int htcount, i, count; if (pthread_mutex_lock(&psn->sn_getstreammutex) != 0) return ERROR; if ((v = htenum(psn->sn_ssrcs)) == NULL) { pthread_mutex_unlock(&psn->sn_getstreammutex); return ERROR; } for (htcount = 0; v[htcount] != NULL; htcount++); maxsources = min(maxsources, htcount); for (i = 0, count = 0; count < maxsources && i < htcount; i++) if (((struct stream *) v[i]->hte_object)->stm_zombie != TRUE) { sources[i] = v[i]->hte_key; count++; } pthread_mutex_unlock(&psn->sn_getstreammutex); free(v); return maxsources; }