static int __alloc_source_slot(webrtc_s *webrtc, int type, webrtc_gst_slot_s **source, gchar **name)
{
- static unsigned int id = 1;
-
RET_VAL_IF(webrtc == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "webrtc is NULL");
RET_VAL_IF(source == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "source is NULL");
RET_VAL_IF(name == NULL, WEBRTC_ERROR_INVALID_PARAMETER, "name is NULL");
RET_VAL_IF(webrtc->gst.source_slots == NULL, WEBRTC_ERROR_INVALID_OPERATION, "source_slots is NULL");
- RET_VAL_IF(id >= MAX_SOURCE_NUM + 1, WEBRTC_ERROR_INVALID_OPERATION, "id exceeds %d", MAX_SOURCE_NUM);
+ RET_VAL_IF(g_hash_table_size(webrtc->gst.source_slots) >= MAX_SOURCE_NUM, WEBRTC_ERROR_INVALID_OPERATION,
+ "number of sources reached %d", MAX_SOURCE_NUM);
/* name/source will be freed by function which is set to g_hash_table_new_full() */
- *name = g_strdup_printf("media_source_%u", id);
+ *name = g_strdup_printf("media_source_%u", ++webrtc->cur_max_source_id);
*source = g_new0(webrtc_gst_slot_s, 1);
- (*source)->id = id;
+ (*source)->id = webrtc->cur_max_source_id;
if (type != WEBRTC_MEDIA_SOURCE_TYPE_NULL)
(*source)->bin = GST_BIN(gst_bin_new(*name));
(*source)->type = type;
(*source)->av[AV_IDX_AUDIO].direction = (type == WEBRTC_MEDIA_SOURCE_TYPE_NULL) ? WEBRTC_TRANSCEIVER_DIRECTION_RECVONLY : WEBRTC_TRANSCEIVER_DIRECTION_SENDRECV;
(*source)->av[AV_IDX_VIDEO].direction = (type == WEBRTC_MEDIA_SOURCE_TYPE_NULL) ? WEBRTC_TRANSCEIVER_DIRECTION_RECVONLY : WEBRTC_TRANSCEIVER_DIRECTION_SENDRECV;
- LOG_DEBUG("webrtc[%p] source[%p, id:%u, type:%d, name:%s]", webrtc, *source, id++, type, *name);
+ LOG_DEBUG("webrtc[%p] source[%p, id:%u, type:%d, name:%s]", webrtc, *source, webrtc->cur_max_source_id, type, *name);
return WEBRTC_ERROR_NONE;
}