Ejemplo n.º 1
0
/**
 * @brief Frees the resources of a Track object
 *
 * @param element Track to free
 * @param user_data Unused, for compatibility with g_list_foreach().
 */
void free_track(gpointer element, gpointer user_data)
{
    Track *track = (Track*)element;
    Resource *r = (Resource*)user_data;

    if (!track)
        return;

    g_mutex_free(track->lock);

	if (track->producer)
	{
		if (bq_producer_test_ref_and_remove(track->producer))	/* only us */
		{
			r_stop_track(r, track->producer, track->info->mrl);
		}
	    bq_producer_unref(track->producer);	/* reach 0, must be here, we have to assume all consumers freed!*/
	}

    g_free(track->info->mrl);
    g_slice_free(TrackInfo, track->info);

    sdp_fields_free(track->sdp_fields);

    if ( track->parser && track->parser->uninit )
        track->parser->uninit(track);

    g_slice_free(Track, track);
}
Ejemplo n.º 2
0
/**
 * @brief Frees the resources of a Track object
 *
 * @param element Track to free
 * @param user_data Unused, for compatibility with g_list_foreach().
 */
void free_track(gpointer element, ATTR_UNUSED gpointer user_data)
{
    Track *track = (Track*)element;

    if (!track)
        return;

    g_mutex_free(track->lock);

    g_free(track->name);
    g_free(track->properties.encoding_name);

    if ( track->producer )
        bq_producer_unref(track->producer);

    if ( track->sdp_description )
        g_string_free(track->sdp_description, true);

    if ( track->parser && track->parser->uninit )
        track->parser->uninit(track);

    g_slice_free(Track, track);
}