Esempio n. 1
0
void owr_data_channel_close(OwrDataChannel *data_channel)
{
    GHashTable *args;

    g_return_if_fail(data_channel);

    args = g_hash_table_new(g_str_hash, g_str_equal);
    g_hash_table_insert(args, "data_channel", data_channel);
    g_object_ref(data_channel);
    _owr_schedule_with_hash_table((GSourceFunc)data_channel_close, args);
}
Esempio n. 2
0
void _owr_data_channel_set_ready_state(OwrDataChannel *data_channel, OwrDataChannelReadyState state)
{
    GHashTable *args;

    g_object_ref(data_channel);

    args = g_hash_table_new(g_str_hash, g_str_equal);
    g_hash_table_insert(args, "data_channel", data_channel);
    g_hash_table_insert(args, "state", GUINT_TO_POINTER(state));

    _owr_schedule_with_hash_table((GSourceFunc)set_ready_state, args);
}
Esempio n. 3
0
/**
 * owr_session_force_remote_candidate:
 * @session: The session on which the candidate will be forced.
 * @candidate: (transfer none): the candidate to forcibly set
 *
 * Forces the transport agent to use the given candidate. Calling this function will disable all
 * further ICE processing. Keep-alives will continue to be sent.
 */
void owr_session_force_remote_candidate(OwrSession *session, OwrCandidate *candidate)
{
    GHashTable *args;

    g_return_if_fail(OWR_IS_SESSION(session));
    g_return_if_fail(OWR_IS_CANDIDATE(candidate));

    args = _owr_create_schedule_table(OWR_MESSAGE_ORIGIN(session));
    g_hash_table_insert(args, "session", session);
    g_hash_table_insert(args, "candidate", candidate);
    g_hash_table_insert(args, "forced", GINT_TO_POINTER(TRUE));
    g_object_ref(session);
    g_object_ref(candidate);

    _owr_schedule_with_hash_table((GSourceFunc)add_remote_candidate, args);
}
Esempio n. 4
0
void owr_window_registry_unregister(OwrWindowRegistry *window_registry,
    const gchar *tag)
{
    GHashTable *args;

    g_return_if_fail(OWR_IS_WINDOW_REGISTRY(window_registry));
    g_return_if_fail(tag);

    args = _owr_create_schedule_table(OWR_MESSAGE_ORIGIN(window_registry));
    g_hash_table_insert(args, "window_registry", window_registry);
    g_hash_table_insert(args, "tag", g_strdup(tag));

    g_object_ref(window_registry);

    _owr_schedule_with_hash_table((GSourceFunc)do_unregister, args);
}
Esempio n. 5
0
/**
 * owr_get_capture_sources:
 * @types:
 * @callback: (scope async):
 * @user_data: (allow-none):
 */
void owr_get_capture_sources(OwrMediaType types, OwrCaptureSourcesCallback callback, gpointer user_data)
{
    GHashTable *args;
    OwrCaptureSourcesCallback *callbacks;

    g_return_if_fail(callback);

    callbacks = g_new(OwrCaptureSourcesCallback, 1);
    callbacks[0] = callback;
    args = g_hash_table_new(g_str_hash, g_str_equal);
    g_hash_table_insert(args, "callback", callbacks);
    g_hash_table_insert(args, "media_types", GUINT_TO_POINTER(types));
    g_hash_table_insert(args, "user_data", user_data);

    _owr_schedule_with_hash_table((GSourceFunc)capture_sources_callback, args);
}
static void tee_pad_removed_cb(GstElement *tee, GstPad *old_pad, gpointer user_data)
{
    OwrMediaSource *media_source = user_data;

    OWR_UNUSED(old_pad);

    /* Only the fakesink is left, shutdown */
    if (tee->numsrcpads == 1) {
      GHashTable *args;

      args = g_hash_table_new(g_str_hash, g_str_equal);
      g_hash_table_insert(args, "media_source", media_source);
      g_object_ref (media_source);

      _owr_schedule_with_hash_table((GSourceFunc)shutdown_media_source, args);
    }
}
Esempio n. 7
0
/**
 * owr_media_renderer_set_source:
 * @renderer:
 * @source: (transfer none) (allow-none):
 *
 * Returns:
 */
void owr_media_renderer_set_source(OwrMediaRenderer *renderer, OwrMediaSource *source)
{
    GHashTable *args;

    g_return_if_fail(OWR_IS_MEDIA_RENDERER(renderer));
    g_return_if_fail(!source || OWR_IS_MEDIA_SOURCE(source));

    args = g_hash_table_new(g_str_hash, g_str_equal);
    g_hash_table_insert(args, "renderer", renderer);
    g_hash_table_insert(args, "source", source);

    g_object_ref(renderer);
    if (source)
        g_object_ref(source);

    _owr_schedule_with_hash_table((GSourceFunc)set_source, args);
}
static void tee_pad_removed_cb(GstElement *tee, GstPad *old_pad, gpointer user_data)
{
    OwrMediaSource *media_source = user_data;

    OWR_UNUSED(old_pad);

    /* No sink is left, shutdown */
    if (!tee->numsrcpads) {
        GHashTable *args;

        args = _owr_create_schedule_table(OWR_MESSAGE_ORIGIN(media_source));
        g_hash_table_insert(args, "media_source", media_source);
        g_object_ref(media_source);

        _owr_schedule_with_hash_table((GSourceFunc)shutdown_media_source, args);
    }
}
Esempio n. 9
0
/**
 * owr_data_channel_send_binary:
 * @data_channel:
 * @data: (array length=length):
 * @length:
 *
 */
void owr_data_channel_send_binary(OwrDataChannel *data_channel, const guint8 *data, guint16 length)
{
    GHashTable *args;
    guint8 *data_out;
    OwrDataChannelPrivate *priv = data_channel->priv;

    g_return_if_fail(data_channel);
    g_return_if_fail(data);

    priv->bytes_sent += length;
    data_out = g_malloc(length);
    memcpy(data_out, data, length);
    args = g_hash_table_new(g_str_hash, g_str_equal);
    g_hash_table_insert(args, "data_channel", data_channel);
    g_hash_table_insert(args, "data", data_out);
    g_hash_table_insert(args, "length", GUINT_TO_POINTER(length));
    g_hash_table_insert(args, "is_binary", GUINT_TO_POINTER(TRUE));
    g_object_ref(data_channel);
    _owr_schedule_with_hash_table((GSourceFunc)data_channel_send, args);
}
Esempio n. 10
0
/**
 * owr_session_force_candidate_pair:
 * @session: The session on which the candidate will be forced.
 * @local_candidate: (transfer none): the local candidate to forcibly set
 * @remote_candidate: (transfer none): the remote candidate to forcibly set
 *
 * Forces the transport agent to use the given candidate pair. Calling this
 * function will disable all further ICE processing. Keep-alives will continue
 * to be sent.
 */
void owr_session_force_candidate_pair(OwrSession *session, OwrComponentType ctype,
        OwrCandidate *local_candidate, OwrCandidate *remote_candidate)
{
    GHashTable *args;

    g_return_if_fail(OWR_IS_SESSION(session));
    g_return_if_fail(OWR_IS_CANDIDATE(local_candidate));
    g_return_if_fail(OWR_IS_CANDIDATE(remote_candidate));

    args = _owr_create_schedule_table(OWR_MESSAGE_ORIGIN(session));
    g_hash_table_insert(args, "session", session);
    g_hash_table_insert(args, "component-type", GUINT_TO_POINTER(ctype));
    g_hash_table_insert(args, "local-candidate", local_candidate);
    g_hash_table_insert(args, "remote-candidate", remote_candidate);
    g_object_ref(session);
    g_object_ref(local_candidate);
    g_object_ref(remote_candidate);

    _owr_schedule_with_hash_table((GSourceFunc)add_candidate_pair, args);
}
Esempio n. 11
0
/**
 * owr_session_add_remote_candidate:
 * @session: the session on which the candidate will be added.
 * @candidate: (transfer none): the candidate to add
 *
 * Adds a remote candidate for this session.
 *
 */
void owr_session_add_remote_candidate(OwrSession *session, OwrCandidate *candidate)
{
    GHashTable *args;

    g_return_if_fail(session);
    g_return_if_fail(candidate);

    if (session->priv->rtcp_mux && _owr_candidate_get_component_type(candidate) == OWR_COMPONENT_TYPE_RTCP) {
        g_warning("Trying to adding RTCP component on an rtcp_muxing session. Aborting");
        return;
    }

    args = _owr_create_schedule_table(OWR_MESSAGE_ORIGIN(session));
    g_hash_table_insert(args, "session", session);
    g_hash_table_insert(args, "candidate", candidate);
    g_object_ref(session);
    g_object_ref(candidate);

    _owr_schedule_with_hash_table((GSourceFunc)add_remote_candidate, args);
}