return WEBRTC_ERROR_NONE;
}
-static unsigned int __get_unoccupied_id(GHashTable *slots)
-{
- int i;
- gchar *key;
-
- RET_VAL_IF(slots == NULL, 0, "slot is NULL");
-
- /* Payload identifiers 96 ~ 127 are used for payloads defined dynamically during a session,
- * hence the id range is limited here to 1-32. */
- for (i = 1; i < MAX_SOURCE_NUM + 1; i++) {
- key = g_strdup_printf("media_source_%u", i);
- if (g_hash_table_contains(slots, key)) {
- g_free(key);
- continue;
- }
- g_free(key);
- return i;
- }
-
- LOG_ERROR("all slots are occupied(1-32)");
-
- return 0;
-}
-
static gboolean __foreach_src_pad_cb(GstElement *element, GstPad *pad, gpointer user_data)
{
webrtc_gst_slot_s *source = (webrtc_gst_slot_s *)user_data;
static int __alloc_source_slot(webrtc_s *webrtc, int type, webrtc_gst_slot_s **source, gchar **name)
{
- unsigned int id;
+ 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);
/* name/source will be freed by function which is set to g_hash_table_new_full() */
- id = __get_unoccupied_id(webrtc->gst.source_slots);
- RET_VAL_IF(id == 0, WEBRTC_ERROR_INVALID_OPERATION, "source_slots are full");
-
*name = g_strdup_printf("media_source_%u", id);
*source = g_new0(webrtc_gst_slot_s, 1);
(*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, id++, type, *name);
return WEBRTC_ERROR_NONE;
}