/** * @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); }
/** * @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); }