in libftl/ftl-sdk.c [32:104]
FTL_API ftl_status_t ftl_ingest_create(ftl_handle_t *ftl_handle, ftl_ingest_params_t *params){
ftl_status_t ret_status = FTL_SUCCESS;
ftl_stream_configuration_private_t *ftl = NULL;
do {
if ((ftl = (ftl_stream_configuration_private_t *)malloc(sizeof(ftl_stream_configuration_private_t))) == NULL) {
// Note it is important that we return here otherwise the call to
// internal_ftl_ingest_destroy will fail!
return FTL_MALLOC_FAILURE;
}
memset(ftl, 0, sizeof(ftl_stream_configuration_private_t));
// First create any components that the system relies on.
os_init_mutex(&ftl->state_mutex);
os_init_mutex(&ftl->disconnect_mutex);
os_init_mutex(&ftl->status_q.mutex);
if (os_semaphore_create(&ftl->status_q.sem, "/StatusQueue", O_CREAT, 0) < 0) {
ret_status = FTL_MALLOC_FAILURE;
break;
}
// Capture the incoming key.
ftl->key = NULL;
if ((ftl->key = (char*)malloc(sizeof(char)*MAX_KEY_LEN)) == NULL) {
ret_status = FTL_MALLOC_FAILURE;
break;
}
if (_get_chan_id_and_key(params->stream_key, &ftl->channel_id, ftl->key) == FALSE) {
ret_status = FTL_BAD_OR_INVALID_STREAM_KEY;
break;
}
ftl->audio.codec = params->audio_codec;
ftl->video.codec = params->video_codec;
ftl->audio.media_component.payload_type = AUDIO_PTYPE;
ftl->video.media_component.payload_type = VIDEO_PTYPE;
//TODO: this should be randomly generated, there is a potential for ssrc collisions with this
ftl->audio.media_component.ssrc = ftl->channel_id;
ftl->video.media_component.ssrc = ftl->channel_id + 1;
ftl->video.fps_num = params->fps_num;
ftl->video.fps_den = params->fps_den;
ftl->video.dts_usec = 0;
ftl->audio.dts_usec = 0;
ftl->video.dts_error = 0;
strncpy_s(ftl->vendor_name, sizeof(ftl->vendor_name) / sizeof(ftl->vendor_name[0]), params->vendor_name, sizeof(ftl->vendor_name) / sizeof(ftl->vendor_name[0]) - 1);
strncpy_s(ftl->vendor_version, sizeof(ftl->vendor_version) / sizeof(ftl->vendor_version[0]), params->vendor_version, sizeof(ftl->vendor_version) / sizeof(ftl->vendor_version[0]) - 1);
/*this is legacy, this isnt used anymore*/
ftl->video.width = 1280;
ftl->video.height = 720;
ftl->video.media_component.peak_kbps = params->peak_kbps;
ftl->param_ingest_hostname = _strdup(params->ingest_hostname);
ftl->status_q.count = 0;
ftl->status_q.head = NULL;
ftl_set_state(ftl, FTL_STATUS_QUEUE);
ftl_handle->priv = ftl;
return ret_status;
} while (0);
internal_ftl_ingest_destroy(ftl);
return ret_status;
}