FTL_API ftl_status_t ftl_ingest_create()

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;  
}