/* module.c generated by valac 0.56.19, the Vala compiler
 * generated from module.vala, do not modify */

#include "rtp.h"
#include <gee.h>
#include <glib-object.h>
#include <stdlib.h>
#include <string.h>
#include <glib.h>
#include "xmpp-vala.h"
#include <gio/gio.h>
#include <gst/gst.h>
#include <gst/app/app.h>
#include "libdino.h"
#include "crypto-vala.h"

#if !defined(VALA_STRICT_C)
#if !defined(__clang__) && defined(__GNUC__) && (__GNUC__ >= 14)
#pragma GCC diagnostic warning "-Wincompatible-pointer-types"
#elif defined(__clang__) && (__clang_major__ >= 16)
#pragma clang diagnostic ignored "-Wincompatible-function-pointer-types"
#pragma clang diagnostic ignored "-Wincompatible-pointer-types"
#endif
#endif

enum  {
	DINO_PLUGINS_RTP_MODULE_0_PROPERTY,
	DINO_PLUGINS_RTP_MODULE_PLUGIN_PROPERTY,
	DINO_PLUGINS_RTP_MODULE_CODEC_UTIL_PROPERTY,
	DINO_PLUGINS_RTP_MODULE_NUM_PROPERTIES
};
static GParamSpec* dino_plugins_rtp_module_properties[DINO_PLUGINS_RTP_MODULE_NUM_PROPERTIES];
#define _g_object_unref0(var) ((var == NULL) ? NULL : (var = (g_object_unref (var), NULL)))
#define _g_free0(var) (var = (g_free (var), NULL))
typedef struct _Block4Data Block4Data;
typedef struct _Block5Data Block5Data;
#define _g_error_free0(var) ((var == NULL) ? NULL : (var = (g_error_free (var), NULL)))
typedef struct _DinoPluginsRtpModulePipelineWorksData DinoPluginsRtpModulePipelineWorksData;
#define _xmpp_xep_jingle_rtp_payload_type_unref0(var) ((var == NULL) ? NULL : (var = (xmpp_xep_jingle_rtp_payload_type_unref (var), NULL)))
typedef struct _DinoPluginsRtpModuleIsPayloadSupportedData DinoPluginsRtpModuleIsPayloadSupportedData;
#define _xmpp_xep_jingle_rtp_header_extension_unref0(var) ((var == NULL) ? NULL : (var = (xmpp_xep_jingle_rtp_header_extension_unref (var), NULL)))
typedef struct _DinoPluginsRtpModuleAddIfSupportedData DinoPluginsRtpModuleAddIfSupportedData;
#define _xmpp_xep_jingle_rtp_rtcp_feedback_unref0(var) ((var == NULL) ? NULL : (var = (xmpp_xep_jingle_rtp_rtcp_feedback_unref (var), NULL)))
typedef struct _DinoPluginsRtpModuleGetSupportedPayloadsData DinoPluginsRtpModuleGetSupportedPayloadsData;
typedef struct _DinoPluginsRtpModulePickPayloadTypeData DinoPluginsRtpModulePickPayloadTypeData;
#define _xmpp_xep_jingle_rtp_crypto_unref0(var) ((var == NULL) ? NULL : (var = (xmpp_xep_jingle_rtp_crypto_unref (var), NULL)))

struct _DinoPluginsRtpModulePrivate {
	GeeSet* supported_codecs;
	GeeSet* unsupported_codecs;
	DinoPluginsRtpPlugin* _plugin;
};

struct _Block4Data {
	int _ref_count_;
	DinoPluginsRtpModule* self;
	gboolean supported;
	gchar* pipeline_desc;
	gpointer _async_data_;
};

struct _Block5Data {
	int _ref_count_;
	Block4Data * _data4_;
	GSourceFunc callback;
	gpointer callback_target;
	GDestroyNotify callback_target_destroy_notify;
	gboolean finished;
};

struct _DinoPluginsRtpModulePipelineWorksData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GTask* _async_result;
	DinoPluginsRtpModule* self;
	gchar* media;
	gchar* element_desc;
	gboolean result;
	Block4Data* _data4_;
	const gchar* _tmp0_;
	const gchar* _tmp1_;
	gchar* _tmp2_;
	Block5Data* _data5_;
	GstElement* pipeline;
	GstElement* _tmp3_;
	GstAppSink* output;
	GstElement* _tmp4_;
	GstAppSink* _tmp5_;
	GstAppSink* _tmp6_;
	GstAppSink* _tmp7_;
	GstBus* _tmp8_;
	GError* e;
	GError* _tmp9_;
	const gchar* _tmp10_;
	GError* _inner_error0_;
};

struct _DinoPluginsRtpModuleIsPayloadSupportedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GTask* _async_result;
	DinoPluginsRtpModule* self;
	gchar* media;
	XmppXepJingleRtpPayloadType* payload_type;
	gboolean result;
	gchar* codec;
	gchar* _tmp0_;
	const gchar* _tmp1_;
	GeeSet* _tmp2_;
	const gchar* _tmp3_;
	GeeSet* _tmp4_;
	const gchar* _tmp5_;
	gchar* encode_element;
	DinoPluginsRtpCodecUtil* _tmp6_;
	DinoPluginsRtpCodecUtil* _tmp7_;
	const gchar* _tmp8_;
	gchar* _tmp9_;
	gchar* decode_element;
	DinoPluginsRtpCodecUtil* _tmp10_;
	DinoPluginsRtpCodecUtil* _tmp11_;
	const gchar* _tmp12_;
	gchar* _tmp13_;
	gboolean _tmp14_;
	const gchar* _tmp15_;
	const gchar* _tmp16_;
	const gchar* _tmp17_;
	GeeSet* _tmp18_;
	const gchar* _tmp19_;
	gchar* encode_bin;
	DinoPluginsRtpCodecUtil* _tmp20_;
	DinoPluginsRtpCodecUtil* _tmp21_;
	const gchar* _tmp22_;
	const gchar* _tmp23_;
	gchar* _tmp24_;
	const gchar* _tmp25_;
	const gchar* _tmp26_;
	const gchar* _tmp27_;
	DinoPluginsRtpCodecUtil* _tmp28_;
	DinoPluginsRtpCodecUtil* _tmp29_;
	const gchar* _tmp30_;
	DinoPluginsRtpCodecUtil* _tmp31_;
	DinoPluginsRtpCodecUtil* _tmp32_;
	const gchar* _tmp33_;
	gchar* _tmp34_;
	const gchar* _tmp35_;
	const gchar* _tmp36_;
	GeeSet* _tmp37_;
	const gchar* _tmp38_;
	DinoPluginsRtpCodecUtil* _tmp39_;
	DinoPluginsRtpCodecUtil* _tmp40_;
	const gchar* _tmp41_;
	const gchar* _tmp42_;
	gchar* _tmp43_;
	const gchar* _tmp44_;
	const gchar* _tmp45_;
	gchar* decode_bin;
	DinoPluginsRtpCodecUtil* _tmp46_;
	DinoPluginsRtpCodecUtil* _tmp47_;
	const gchar* _tmp48_;
	const gchar* _tmp49_;
	gchar* _tmp50_;
	const gchar* _tmp51_;
	const gchar* _tmp52_;
	const gchar* _tmp53_;
	const gchar* _tmp54_;
	gchar* _tmp55_;
	gchar* _tmp56_;
	gboolean _tmp57_;
	const gchar* _tmp58_;
	const gchar* _tmp59_;
	DinoPluginsRtpCodecUtil* _tmp60_;
	DinoPluginsRtpCodecUtil* _tmp61_;
	const gchar* _tmp62_;
	DinoPluginsRtpCodecUtil* _tmp63_;
	DinoPluginsRtpCodecUtil* _tmp64_;
	const gchar* _tmp65_;
	gchar* _tmp66_;
	const gchar* _tmp67_;
	const gchar* _tmp68_;
	GeeSet* _tmp69_;
	const gchar* _tmp70_;
	DinoPluginsRtpCodecUtil* _tmp71_;
	DinoPluginsRtpCodecUtil* _tmp72_;
	const gchar* _tmp73_;
	const gchar* _tmp74_;
	gchar* _tmp75_;
	const gchar* _tmp76_;
	const gchar* _tmp77_;
	GeeSet* _tmp78_;
	const gchar* _tmp79_;
};

struct _DinoPluginsRtpModuleAddIfSupportedData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GTask* _async_result;
	DinoPluginsRtpModule* self;
	GeeList* list;
	gchar* media;
	XmppXepJingleRtpPayloadType* payload_type;
};

struct _DinoPluginsRtpModuleGetSupportedPayloadsData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GTask* _async_result;
	DinoPluginsRtpModule* self;
	gchar* media;
	GeeList* result;
	GeeList* list;
	GeeArrayList* _tmp0_;
	XmppXepJingleRtpPayloadType* opus;
	gchar* _tmp1_;
	XmppXepJingleRtpPayloadType* _tmp2_;
	XmppXepJingleRtpPayloadType* _tmp3_;
	GeeMap* _tmp4_;
	XmppXepJingleRtpPayloadType* speex32;
	gchar* _tmp5_;
	XmppXepJingleRtpPayloadType* _tmp6_;
	XmppXepJingleRtpPayloadType* speex16;
	gchar* _tmp7_;
	XmppXepJingleRtpPayloadType* _tmp8_;
	XmppXepJingleRtpPayloadType* speex8;
	gchar* _tmp9_;
	XmppXepJingleRtpPayloadType* _tmp10_;
	XmppXepJingleRtpPayloadType* g722;
	gchar* _tmp11_;
	XmppXepJingleRtpPayloadType* _tmp12_;
	XmppXepJingleRtpPayloadType* pcmu;
	gchar* _tmp13_;
	XmppXepJingleRtpPayloadType* _tmp14_;
	XmppXepJingleRtpPayloadType* pcma;
	gchar* _tmp15_;
	XmppXepJingleRtpPayloadType* _tmp16_;
	GeeList* _tmp17_;
	XmppXepJingleRtpPayloadType* _tmp18_;
	GeeList* _tmp19_;
	XmppXepJingleRtpPayloadType* _tmp20_;
	GeeList* _tmp21_;
	XmppXepJingleRtpPayloadType* _tmp22_;
	GeeList* _tmp23_;
	XmppXepJingleRtpPayloadType* _tmp24_;
	GeeList* _tmp25_;
	XmppXepJingleRtpPayloadType* _tmp26_;
	GeeList* _tmp27_;
	XmppXepJingleRtpPayloadType* _tmp28_;
	GeeList* _tmp29_;
	XmppXepJingleRtpPayloadType* _tmp30_;
	GeeArrayList* rtcp_fbs;
	GeeArrayList* _tmp31_;
	GeeArrayList* _tmp32_;
	XmppXepJingleRtpRtcpFeedback* _tmp33_;
	XmppXepJingleRtpRtcpFeedback* _tmp34_;
	GeeArrayList* _tmp35_;
	XmppXepJingleRtpRtcpFeedback* _tmp36_;
	XmppXepJingleRtpRtcpFeedback* _tmp37_;
	GeeArrayList* _tmp38_;
	XmppXepJingleRtpRtcpFeedback* _tmp39_;
	XmppXepJingleRtpRtcpFeedback* _tmp40_;
	GeeArrayList* _tmp41_;
	XmppXepJingleRtpRtcpFeedback* _tmp42_;
	XmppXepJingleRtpRtcpFeedback* _tmp43_;
	XmppXepJingleRtpPayloadType* vp8;
	gchar* _tmp44_;
	XmppXepJingleRtpPayloadType* _tmp45_;
	XmppXepJingleRtpPayloadType* _tmp46_;
	GeeList* _tmp47_;
	GeeArrayList* _tmp48_;
	GeeList* _tmp49_;
	XmppXepJingleRtpPayloadType* _tmp50_;
};

struct _DinoPluginsRtpModulePickPayloadTypeData {
	int _state_;
	GObject* _source_object_;
	GAsyncResult* _res_;
	GTask* _async_result;
	DinoPluginsRtpModule* self;
	gchar* media;
	GeeList* payloads;
	XmppXepJingleRtpPayloadType* result;
	gboolean _tmp0_;
	GeeList* _type_list;
	gint _type_size;
	GeeList* _tmp1_;
	gint _tmp2_;
	gint _tmp3_;
	gint _type_index;
	gint _tmp4_;
	gint _tmp5_;
	XmppXepJingleRtpPayloadType* type;
	GeeList* _tmp6_;
	gpointer _tmp7_;
	XmppXepJingleRtpPayloadType* _tmp8_;
	XmppXepJingleRtpPayloadType* _tmp9_;
	XmppXepJingleRtpPayloadType* _tmp10_;
	XmppXepJingleRtpPayloadType* _tmp11_;
	XmppXepJingleRtpPayloadType* _tmp12_;
	XmppXepJingleRtpPayloadType* _tmp13_;
};

static gint DinoPluginsRtpModule_private_offset;
static gpointer dino_plugins_rtp_module_parent_class = NULL;

static void dino_plugins_rtp_module_set_plugin (DinoPluginsRtpModule* self,
                                         DinoPluginsRtpPlugin* value);
static void dino_plugins_rtp_module_pipeline_works_data_free (gpointer _data);
static void dino_plugins_rtp_module_pipeline_works (DinoPluginsRtpModule* self,
                                             const gchar* media,
                                             const gchar* element_desc,
                                             GAsyncReadyCallback _callback_,
                                             gpointer _user_data_);
static gboolean dino_plugins_rtp_module_pipeline_works_finish (DinoPluginsRtpModule* self,
                                                        GAsyncResult* _res_);
static gboolean dino_plugins_rtp_module_pipeline_works_co (DinoPluginsRtpModulePipelineWorksData* _data_);
static Block4Data* block4_data_ref (Block4Data* _data4_);
static void block4_data_unref (void * _userdata_);
static Block5Data* block5_data_ref (Block5Data* _data5_);
static void block5_data_unref (void * _userdata_);
static gboolean _dino_plugins_rtp_module_pipeline_works_co_gsource_func (gpointer self);
static GstFlowReturn ___lambda16_ (Block5Data* _data5_);
static gboolean ___lambda17_ (Block5Data* _data5_);
static gboolean ____lambda17__gsource_func (gpointer self);
static GstFlowReturn ____lambda16__gst_app_sink_new_sample (GstAppSink* _sender,
                                                     gpointer self);
static gboolean ___lambda18_ (Block5Data* _data5_,
                       GstBus* _,
                       GstMessage* message);
static gboolean ____lambda18__gst_bus_func (GstBus* bus,
                                     GstMessage* message,
                                     gpointer self);
static gboolean ___lambda19_ (Block5Data* _data5_);
static gboolean ____lambda19__gsource_func (gpointer self);
static void dino_plugins_rtp_module_real_is_payload_supported_data_free (gpointer _data);
static void dino_plugins_rtp_module_real_is_payload_supported (XmppXepJingleRtpModule* base,
                                                        const gchar* media,
                                                        XmppXepJingleRtpPayloadType* payload_type,
                                                        GAsyncReadyCallback _callback_,
                                                        gpointer _user_data_);
static gboolean dino_plugins_rtp_module_real_is_payload_supported_co (DinoPluginsRtpModuleIsPayloadSupportedData* _data_);
static void dino_plugins_rtp_module_is_payload_supported_ready (GObject* source_object,
                                                         GAsyncResult* _res_,
                                                         gpointer _user_data_);
static gboolean dino_plugins_rtp_module_real_is_header_extension_supported (XmppXepJingleRtpModule* base,
                                                                     const gchar* media,
                                                                     XmppXepJingleRtpHeaderExtension* ext);
static GeeList* dino_plugins_rtp_module_real_get_suggested_header_extensions (XmppXepJingleRtpModule* base,
                                                                       const gchar* media);
static void dino_plugins_rtp_module_add_if_supported_data_free (gpointer _data);
static gboolean dino_plugins_rtp_module_add_if_supported_co (DinoPluginsRtpModuleAddIfSupportedData* _data_);
static void dino_plugins_rtp_module_add_if_supported_ready (GObject* source_object,
                                                     GAsyncResult* _res_,
                                                     gpointer _user_data_);
static void dino_plugins_rtp_module_real_get_supported_payloads_data_free (gpointer _data);
static void dino_plugins_rtp_module_real_get_supported_payloads (XmppXepJingleRtpModule* base,
                                                          const gchar* media,
                                                          GAsyncReadyCallback _callback_,
                                                          gpointer _user_data_);
static gboolean dino_plugins_rtp_module_real_get_supported_payloads_co (DinoPluginsRtpModuleGetSupportedPayloadsData* _data_);
static gboolean _xmpp_xep_jingle_rtp_payload_type_equals_func_gee_equal_data_func (gconstpointer a,
                                                                            gconstpointer b,
                                                                            gpointer self);
static void dino_plugins_rtp_module_get_supported_payloads_ready (GObject* source_object,
                                                           GAsyncResult* _res_,
                                                           gpointer _user_data_);
static void dino_plugins_rtp_module_real_pick_payload_type_data_free (gpointer _data);
static void dino_plugins_rtp_module_real_pick_payload_type (XmppXepJingleRtpModule* base,
                                                     const gchar* media,
                                                     GeeList* payloads,
                                                     GAsyncReadyCallback _callback_,
                                                     gpointer _user_data_);
static gboolean dino_plugins_rtp_module_real_pick_payload_type_co (DinoPluginsRtpModulePickPayloadTypeData* _data_);
static void dino_plugins_rtp_module_pick_payload_type_ready (GObject* source_object,
                                                      GAsyncResult* _res_,
                                                      gpointer _user_data_);
static XmppXepJingleRtpStream* dino_plugins_rtp_module_real_create_stream (XmppXepJingleRtpModule* base,
                                                                    XmppXepJingleContent* content);
static void dino_plugins_rtp_module_real_close_stream (XmppXepJingleRtpModule* base,
                                                XmppXepJingleRtpStream* stream);
static XmppXepJingleRtpCrypto* dino_plugins_rtp_module_real_generate_local_crypto (XmppXepJingleRtpModule* base);
static XmppXepJingleRtpCrypto* dino_plugins_rtp_module_real_pick_remote_crypto (XmppXepJingleRtpModule* base,
                                                                         GeeList* cryptos);
static XmppXepJingleRtpCrypto* dino_plugins_rtp_module_real_pick_local_crypto (XmppXepJingleRtpModule* base,
                                                                        XmppXepJingleRtpCrypto* remote);
static void dino_plugins_rtp_module_finalize (GObject * obj);
static GType dino_plugins_rtp_module_get_type_once (void);
static void _vala_dino_plugins_rtp_module_get_property (GObject * object,
                                                 guint property_id,
                                                 GValue * value,
                                                 GParamSpec * pspec);
static void _vala_dino_plugins_rtp_module_set_property (GObject * object,
                                                 guint property_id,
                                                 const GValue * value,
                                                 GParamSpec * pspec);

static inline gpointer
dino_plugins_rtp_module_get_instance_private (DinoPluginsRtpModule* self)
{
	return G_STRUCT_MEMBER_P (self, DinoPluginsRtpModule_private_offset);
}

DinoPluginsRtpModule*
dino_plugins_rtp_module_construct (GType object_type,
                                   DinoPluginsRtpPlugin* plugin)
{
	DinoPluginsRtpModule * self = NULL;
	g_return_val_if_fail (plugin != NULL, NULL);
	self = (DinoPluginsRtpModule*) xmpp_xep_jingle_rtp_module_construct (object_type);
	dino_plugins_rtp_module_set_plugin (self, plugin);
	return self;
}

DinoPluginsRtpModule*
dino_plugins_rtp_module_new (DinoPluginsRtpPlugin* plugin)
{
	return dino_plugins_rtp_module_construct (DINO_PLUGINS_RTP_TYPE_MODULE, plugin);
}

static void
dino_plugins_rtp_module_pipeline_works_data_free (gpointer _data)
{
	DinoPluginsRtpModulePipelineWorksData* _data_;
	_data_ = _data;
	_g_free0 (_data_->media);
	_g_free0 (_data_->element_desc);
	_g_object_unref0 (_data_->self);
	g_slice_free (DinoPluginsRtpModulePipelineWorksData, _data_);
}

static gpointer
_g_object_ref0 (gpointer self)
{
	return self ? g_object_ref (self) : NULL;
}

static void
dino_plugins_rtp_module_pipeline_works (DinoPluginsRtpModule* self,
                                        const gchar* media,
                                        const gchar* element_desc,
                                        GAsyncReadyCallback _callback_,
                                        gpointer _user_data_)
{
	DinoPluginsRtpModulePipelineWorksData* _data_;
	DinoPluginsRtpModule* _tmp0_;
	gchar* _tmp1_;
	gchar* _tmp2_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (media != NULL);
	g_return_if_fail (element_desc != NULL);
	_data_ = g_slice_new0 (DinoPluginsRtpModulePipelineWorksData);
	_data_->_async_result = g_task_new (G_OBJECT (self), NULL, _callback_, _user_data_);
	g_task_set_task_data (_data_->_async_result, _data_, dino_plugins_rtp_module_pipeline_works_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = g_strdup (media);
	_g_free0 (_data_->media);
	_data_->media = _tmp1_;
	_tmp2_ = g_strdup (element_desc);
	_g_free0 (_data_->element_desc);
	_data_->element_desc = _tmp2_;
	dino_plugins_rtp_module_pipeline_works_co (_data_);
}

static gboolean
dino_plugins_rtp_module_pipeline_works_finish (DinoPluginsRtpModule* self,
                                               GAsyncResult* _res_)
{
	gboolean result;
	DinoPluginsRtpModulePipelineWorksData* _data_;
	_data_ = g_task_propagate_pointer (G_TASK (_res_), NULL);
	result = _data_->result;
	return result;
}

static Block4Data*
block4_data_ref (Block4Data* _data4_)
{
	g_atomic_int_inc (&_data4_->_ref_count_);
	return _data4_;
}

static void
block4_data_unref (void * _userdata_)
{
	Block4Data* _data4_;
	_data4_ = (Block4Data*) _userdata_;
	if (g_atomic_int_dec_and_test (&_data4_->_ref_count_)) {
		DinoPluginsRtpModule* self;
		self = _data4_->self;
		_g_free0 (_data4_->pipeline_desc);
		_g_object_unref0 (self);
		g_slice_free (Block4Data, _data4_);
	}
}

static const gchar*
string_to_string (const gchar* self)
{
	const gchar* result;
	g_return_val_if_fail (self != NULL, NULL);
	result = self;
	return result;
}

static Block5Data*
block5_data_ref (Block5Data* _data5_)
{
	g_atomic_int_inc (&_data5_->_ref_count_);
	return _data5_;
}

static void
block5_data_unref (void * _userdata_)
{
	Block5Data* _data5_;
	_data5_ = (Block5Data*) _userdata_;
	if (g_atomic_int_dec_and_test (&_data5_->_ref_count_)) {
		DinoPluginsRtpModule* self;
		self = _data5_->_data4_->self;
		(_data5_->callback_target_destroy_notify == NULL) ? NULL : (_data5_->callback_target_destroy_notify (_data5_->callback_target), NULL);
		_data5_->callback = NULL;
		_data5_->callback_target = NULL;
		_data5_->callback_target_destroy_notify = NULL;
		block4_data_unref (_data5_->_data4_);
		_data5_->_data4_ = NULL;
		g_slice_free (Block5Data, _data5_);
	}
}

static gboolean
_dino_plugins_rtp_module_pipeline_works_co_gsource_func (gpointer self)
{
	gboolean result;
	result = dino_plugins_rtp_module_pipeline_works_co (self);
	return result;
}

static gboolean
___lambda17_ (Block5Data* _data5_)
{
	Block4Data* _data4_;
	DinoPluginsRtpModule* self;
	GSourceFunc _tmp0_;
	gpointer _tmp0__target;
	gboolean result;
	_data4_ = _data5_->_data4_;
	self = _data4_->self;
	_tmp0_ = _data5_->callback;
	_tmp0__target = _data5_->callback_target;
	_tmp0_ (_tmp0__target);
	result = G_SOURCE_REMOVE;
	return result;
}

static gboolean
____lambda17__gsource_func (gpointer self)
{
	gboolean result;
	result = ___lambda17_ (self);
	return result;
}

static GstFlowReturn
___lambda16_ (Block5Data* _data5_)
{
	Block4Data* _data4_;
	DinoPluginsRtpModule* self;
	GstFlowReturn result;
	_data4_ = _data5_->_data4_;
	self = _data4_->self;
	if (!_data5_->finished) {
		_data5_->finished = TRUE;
		_data4_->supported = TRUE;
		g_idle_add_full (G_PRIORITY_DEFAULT_IDLE, ____lambda17__gsource_func, block5_data_ref (_data5_), block5_data_unref);
	}
	result = GST_FLOW_EOS;
	return result;
}

static GstFlowReturn
____lambda16__gst_app_sink_new_sample (GstAppSink* _sender,
                                       gpointer self)
{
	GstFlowReturn result;
	result = ___lambda16_ (self);
	return result;
}

static gboolean
___lambda18_ (Block5Data* _data5_,
              GstBus* _,
              GstMessage* message)
{
	Block4Data* _data4_;
	DinoPluginsRtpModule* self;
	gboolean _tmp0_ = FALSE;
	gboolean result;
	_data4_ = _data5_->_data4_;
	self = _data4_->self;
	g_return_val_if_fail (_ != NULL, FALSE);
	g_return_val_if_fail (message != NULL, FALSE);
	if (message->type == GST_MESSAGE_ERROR) {
		_tmp0_ = !_data5_->finished;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		GError* e = NULL;
		gchar* d = NULL;
		GError* _tmp1_ = NULL;
		gchar* _tmp2_ = NULL;
		GError* _tmp3_;
		const gchar* _tmp4_;
		const gchar* _tmp5_;
		GSourceFunc _tmp6_;
		gpointer _tmp6__target;
		gst_message_parse_error (message, &_tmp1_, &_tmp2_);
		_g_error_free0 (e);
		e = _tmp1_;
		_g_free0 (d);
		d = _tmp2_;
		_tmp3_ = e;
		_tmp4_ = _tmp3_->message;
		g_debug ("module.vala:43: pipeline [%s] failed: %s", _data4_->pipeline_desc, _tmp4_);
		_tmp5_ = d;
		g_debug ("module.vala:44: %s", _tmp5_);
		_data5_->finished = TRUE;
		_tmp6_ = _data5_->callback;
		_tmp6__target = _data5_->callback_target;
		_tmp6_ (_tmp6__target);
		_g_free0 (d);
		_g_error_free0 (e);
	}
	result = TRUE;
	return result;
}

static gboolean
____lambda18__gst_bus_func (GstBus* bus,
                            GstMessage* message,
                            gpointer self)
{
	gboolean result;
	result = ___lambda18_ (self, bus, message);
	return result;
}

static gboolean
___lambda19_ (Block5Data* _data5_)
{
	Block4Data* _data4_;
	DinoPluginsRtpModule* self;
	gboolean result;
	_data4_ = _data5_->_data4_;
	self = _data4_->self;
	if (!_data5_->finished) {
		GSourceFunc _tmp0_;
		gpointer _tmp0__target;
		_data5_->finished = TRUE;
		_tmp0_ = _data5_->callback;
		_tmp0__target = _data5_->callback_target;
		_tmp0_ (_tmp0__target);
	}
	result = G_SOURCE_REMOVE;
	return result;
}

static gboolean
____lambda19__gsource_func (gpointer self)
{
	gboolean result;
	result = ___lambda19_ (self);
	return result;
}

static gboolean
dino_plugins_rtp_module_pipeline_works_co (DinoPluginsRtpModulePipelineWorksData* _data_)
{
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_data4_ = g_slice_new0 (Block4Data);
	_data_->_data4_->_ref_count_ = 1;
	_data_->_data4_->self = g_object_ref (_data_->self);
	_data_->_data4_->_async_data_ = _data_;
	_data_->_data4_->supported = FALSE;
	_data_->_tmp0_ = string_to_string (_data_->media);
	_data_->_tmp1_ = string_to_string (_data_->element_desc);
	_data_->_tmp2_ = g_strconcat (_data_->_tmp0_, "testsrc is-live=true ! ", _data_->_tmp1_, " ! appsink name=output", NULL);
	_data_->_data4_->pipeline_desc = _data_->_tmp2_;
	{
		_data_->_data5_ = g_slice_new0 (Block5Data);
		_data_->_data5_->_ref_count_ = 1;
		_data_->_data5_->_data4_ = block4_data_ref (_data_->_data4_);
		_data_->_tmp3_ = gst_parse_launch_full (_data_->_data4_->pipeline_desc, NULL, GST_PARSE_FLAG_NONE, &_data_->_inner_error0_);
		if (_data_->_tmp3_ != NULL) {
			g_object_ref_sink (_data_->_tmp3_);
		}
		_data_->pipeline = _data_->_tmp3_;
		if (G_UNLIKELY (_data_->_inner_error0_ != NULL)) {
			block5_data_unref (_data_->_data5_);
			_data_->_data5_ = NULL;
			goto __catch0_g_error;
		}
		_data_->_tmp4_ = gst_bin_get_by_name (G_TYPE_CHECK_INSTANCE_CAST (_data_->pipeline, gst_bin_get_type (), GstBin), "output");
		_data_->_tmp5_ = G_TYPE_CHECK_INSTANCE_TYPE (_data_->_tmp4_, gst_app_sink_get_type ()) ? ((GstAppSink*) _data_->_tmp4_) : NULL;
		if (_data_->_tmp5_ == NULL) {
			_g_object_unref0 (_data_->_tmp4_);
		}
		_data_->output = _data_->_tmp5_;
		_data_->_data5_->callback = _dino_plugins_rtp_module_pipeline_works_co_gsource_func;
		_data_->_data5_->callback_target = _data_;
		_data_->_data5_->callback_target_destroy_notify = NULL;
		_data_->_data5_->finished = FALSE;
		_data_->_tmp6_ = _data_->output;
		gst_app_sink_set_emit_signals (_data_->_tmp6_, TRUE);
		_data_->_tmp7_ = _data_->output;
		g_signal_connect_data (_data_->_tmp7_, "new-sample", (GCallback) ____lambda16__gst_app_sink_new_sample, block5_data_ref (_data_->_data5_), (GClosureNotify) block5_data_unref, 0);
		_data_->_tmp8_ = _data_->pipeline->bus;
		gst_bus_add_watch_full (_data_->_tmp8_, (gint) DINO_PLUGINS_PRIORITY_DEFAULT, ____lambda18__gst_bus_func, block5_data_ref (_data_->_data5_), block5_data_unref);
		g_timeout_add_full (G_PRIORITY_DEFAULT, (guint) 2000, ____lambda19__gsource_func, block5_data_ref (_data_->_data5_), block5_data_unref);
		gst_element_set_state (_data_->pipeline, GST_STATE_PLAYING);
		_data_->_state_ = 1;
		return FALSE;
		_state_1:
		;
		gst_element_set_state (_data_->pipeline, GST_STATE_NULL);
		_g_object_unref0 (_data_->output);
		_g_object_unref0 (_data_->pipeline);
		block5_data_unref (_data_->_data5_);
		_data_->_data5_ = NULL;
	}
	goto __finally0;
	__catch0_g_error:
	{
		_data_->e = _data_->_inner_error0_;
		_data_->_inner_error0_ = NULL;
		_data_->_tmp9_ = _data_->e;
		_data_->_tmp10_ = _data_->_tmp9_->message;
		g_debug ("module.vala:61: pipeline [%s] failed: %s", _data_->_data4_->pipeline_desc, _data_->_tmp10_);
		_g_error_free0 (_data_->e);
	}
	__finally0:
	if (G_UNLIKELY (_data_->_inner_error0_ != NULL)) {
		block4_data_unref (_data_->_data4_);
		_data_->_data4_ = NULL;
		g_critical ("file %s: line %d: uncaught error: %s (%s, %d)", __FILE__, __LINE__, _data_->_inner_error0_->message, g_quark_to_string (_data_->_inner_error0_->domain), _data_->_inner_error0_->code);
		g_clear_error (&_data_->_inner_error0_);
		g_object_unref (_data_->_async_result);
		return FALSE;
	}
	_data_->result = _data_->_data4_->supported;
	block4_data_unref (_data_->_data4_);
	_data_->_data4_ = NULL;
	g_task_return_pointer (_data_->_async_result, _data_, NULL);
	if (_data_->_state_ != 0) {
		while (!g_task_get_completed (_data_->_async_result)) {
			g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
		}
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}

static void
dino_plugins_rtp_module_real_is_payload_supported_data_free (gpointer _data)
{
	DinoPluginsRtpModuleIsPayloadSupportedData* _data_;
	_data_ = _data;
	_g_free0 (_data_->media);
	_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->payload_type);
	_g_object_unref0 (_data_->self);
	g_slice_free (DinoPluginsRtpModuleIsPayloadSupportedData, _data_);
}

static gpointer
_xmpp_xep_jingle_rtp_payload_type_ref0 (gpointer self)
{
	return self ? xmpp_xep_jingle_rtp_payload_type_ref (self) : NULL;
}

static void
dino_plugins_rtp_module_real_is_payload_supported (XmppXepJingleRtpModule* base,
                                                   const gchar* media,
                                                   XmppXepJingleRtpPayloadType* payload_type,
                                                   GAsyncReadyCallback _callback_,
                                                   gpointer _user_data_)
{
	DinoPluginsRtpModule * self;
	DinoPluginsRtpModuleIsPayloadSupportedData* _data_;
	DinoPluginsRtpModule* _tmp0_;
	gchar* _tmp1_;
	XmppXepJingleRtpPayloadType* _tmp2_;
	g_return_if_fail (media != NULL);
	g_return_if_fail (payload_type != NULL);
	self = (DinoPluginsRtpModule*) base;
	_data_ = g_slice_new0 (DinoPluginsRtpModuleIsPayloadSupportedData);
	_data_->_async_result = g_task_new (G_OBJECT (self), NULL, _callback_, _user_data_);
	g_task_set_task_data (_data_->_async_result, _data_, dino_plugins_rtp_module_real_is_payload_supported_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = g_strdup (media);
	_g_free0 (_data_->media);
	_data_->media = _tmp1_;
	_tmp2_ = _xmpp_xep_jingle_rtp_payload_type_ref0 (payload_type);
	_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->payload_type);
	_data_->payload_type = _tmp2_;
	dino_plugins_rtp_module_real_is_payload_supported_co (_data_);
}

static gboolean
dino_plugins_rtp_module_is_payload_supported_finish (XmppXepJingleRtpModule* base,
                                                     GAsyncResult* _res_)
{
	gboolean result;
	DinoPluginsRtpModuleIsPayloadSupportedData* _data_;
	_data_ = g_task_propagate_pointer (G_TASK (_res_), NULL);
	result = _data_->result;
	return result;
}

static void
dino_plugins_rtp_module_is_payload_supported_ready (GObject* source_object,
                                                    GAsyncResult* _res_,
                                                    gpointer _user_data_)
{
	DinoPluginsRtpModuleIsPayloadSupportedData* _data_;
	_data_ = _user_data_;
	_data_->_source_object_ = source_object;
	_data_->_res_ = _res_;
	dino_plugins_rtp_module_real_is_payload_supported_co (_data_);
}

static gboolean
dino_plugins_rtp_module_real_is_payload_supported_co (DinoPluginsRtpModuleIsPayloadSupportedData* _data_)
{
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		case 2:
		goto _state_2;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = dino_plugins_rtp_codec_util_get_codec_from_payload (_data_->media, _data_->payload_type);
	_data_->codec = _data_->_tmp0_;
	_data_->_tmp1_ = _data_->codec;
	if (_data_->_tmp1_ == NULL) {
		_data_->result = FALSE;
		_g_free0 (_data_->codec);
		g_task_return_pointer (_data_->_async_result, _data_, NULL);
		if (_data_->_state_ != 0) {
			while (!g_task_get_completed (_data_->_async_result)) {
				g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
			}
		}
		g_object_unref (_data_->_async_result);
		return FALSE;
	}
	_data_->_tmp2_ = _data_->self->priv->unsupported_codecs;
	_data_->_tmp3_ = _data_->codec;
	if (gee_collection_contains ((GeeCollection*) _data_->_tmp2_, _data_->_tmp3_)) {
		_data_->result = FALSE;
		_g_free0 (_data_->codec);
		g_task_return_pointer (_data_->_async_result, _data_, NULL);
		if (_data_->_state_ != 0) {
			while (!g_task_get_completed (_data_->_async_result)) {
				g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
			}
		}
		g_object_unref (_data_->_async_result);
		return FALSE;
	}
	_data_->_tmp4_ = _data_->self->priv->supported_codecs;
	_data_->_tmp5_ = _data_->codec;
	if (gee_collection_contains ((GeeCollection*) _data_->_tmp4_, _data_->_tmp5_)) {
		_data_->result = TRUE;
		_g_free0 (_data_->codec);
		g_task_return_pointer (_data_->_async_result, _data_, NULL);
		if (_data_->_state_ != 0) {
			while (!g_task_get_completed (_data_->_async_result)) {
				g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
			}
		}
		g_object_unref (_data_->_async_result);
		return FALSE;
	}
	_data_->_tmp6_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
	_data_->_tmp7_ = _data_->_tmp6_;
	_data_->_tmp8_ = _data_->codec;
	_data_->_tmp9_ = dino_plugins_rtp_codec_util_get_encode_element_name (_data_->_tmp7_, _data_->media, _data_->_tmp8_);
	_data_->encode_element = _data_->_tmp9_;
	_data_->_tmp10_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
	_data_->_tmp11_ = _data_->_tmp10_;
	_data_->_tmp12_ = _data_->codec;
	_data_->_tmp13_ = dino_plugins_rtp_codec_util_get_decode_element_name (_data_->_tmp11_, _data_->media, _data_->_tmp12_);
	_data_->decode_element = _data_->_tmp13_;
	_data_->_tmp15_ = _data_->encode_element;
	if (_data_->_tmp15_ == NULL) {
		_data_->_tmp14_ = TRUE;
	} else {
		_data_->_tmp16_ = _data_->decode_element;
		_data_->_tmp14_ = _data_->_tmp16_ == NULL;
	}
	if (_data_->_tmp14_) {
		_data_->_tmp17_ = _data_->codec;
		g_warning ("module.vala:75: No suitable encoder or decoder found for %s", _data_->_tmp17_);
		_data_->_tmp18_ = _data_->self->priv->unsupported_codecs;
		_data_->_tmp19_ = _data_->codec;
		gee_collection_add ((GeeCollection*) _data_->_tmp18_, _data_->_tmp19_);
		_data_->result = FALSE;
		_g_free0 (_data_->decode_element);
		_g_free0 (_data_->encode_element);
		_g_free0 (_data_->codec);
		g_task_return_pointer (_data_->_async_result, _data_, NULL);
		if (_data_->_state_ != 0) {
			while (!g_task_get_completed (_data_->_async_result)) {
				g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
			}
		}
		g_object_unref (_data_->_async_result);
		return FALSE;
	}
	_data_->_tmp20_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
	_data_->_tmp21_ = _data_->_tmp20_;
	_data_->_tmp22_ = _data_->codec;
	_data_->_tmp23_ = _data_->encode_element;
	_data_->_tmp24_ = dino_plugins_rtp_codec_util_get_encode_bin_description (_data_->_tmp21_, _data_->media, _data_->_tmp22_, NULL, _data_->_tmp23_, NULL);
	_data_->encode_bin = _data_->_tmp24_;
	while (TRUE) {
		_data_->_tmp25_ = _data_->encode_bin;
		_data_->_state_ = 1;
		dino_plugins_rtp_module_pipeline_works (_data_->self, _data_->media, _data_->_tmp25_, dino_plugins_rtp_module_is_payload_supported_ready, _data_);
		return FALSE;
		_state_1:
		if (!(!dino_plugins_rtp_module_pipeline_works_finish (_data_->self, _data_->_res_))) {
			break;
		}
		_data_->_tmp26_ = _data_->encode_element;
		_data_->_tmp27_ = _data_->codec;
		g_debug ("module.vala:82: %s not suited for encoding %s", _data_->_tmp26_, _data_->_tmp27_);
		_data_->_tmp28_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
		_data_->_tmp29_ = _data_->_tmp28_;
		_data_->_tmp30_ = _data_->encode_element;
		dino_plugins_rtp_codec_util_mark_element_unsupported (_data_->_tmp29_, _data_->_tmp30_);
		_data_->_tmp31_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
		_data_->_tmp32_ = _data_->_tmp31_;
		_data_->_tmp33_ = _data_->codec;
		_data_->_tmp34_ = dino_plugins_rtp_codec_util_get_encode_element_name (_data_->_tmp32_, _data_->media, _data_->_tmp33_);
		_g_free0 (_data_->encode_element);
		_data_->encode_element = _data_->_tmp34_;
		_data_->_tmp35_ = _data_->encode_element;
		if (_data_->_tmp35_ == NULL) {
			_data_->_tmp36_ = _data_->codec;
			g_warning ("module.vala:86: No suitable encoder found for %s", _data_->_tmp36_);
			_data_->_tmp37_ = _data_->self->priv->unsupported_codecs;
			_data_->_tmp38_ = _data_->codec;
			gee_collection_add ((GeeCollection*) _data_->_tmp37_, _data_->_tmp38_);
			_data_->result = FALSE;
			_g_free0 (_data_->encode_bin);
			_g_free0 (_data_->decode_element);
			_g_free0 (_data_->encode_element);
			_g_free0 (_data_->codec);
			g_task_return_pointer (_data_->_async_result, _data_, NULL);
			if (_data_->_state_ != 0) {
				while (!g_task_get_completed (_data_->_async_result)) {
					g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
				}
			}
			g_object_unref (_data_->_async_result);
			return FALSE;
		}
		_data_->_tmp39_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
		_data_->_tmp40_ = _data_->_tmp39_;
		_data_->_tmp41_ = _data_->codec;
		_data_->_tmp42_ = _data_->encode_element;
		_data_->_tmp43_ = dino_plugins_rtp_codec_util_get_encode_bin_description (_data_->_tmp40_, _data_->media, _data_->_tmp41_, NULL, _data_->_tmp42_, NULL);
		_g_free0 (_data_->encode_bin);
		_data_->encode_bin = _data_->_tmp43_;
	}
	_data_->_tmp44_ = _data_->encode_element;
	_data_->_tmp45_ = _data_->codec;
	g_debug ("module.vala:92: using %s to encode %s", _data_->_tmp44_, _data_->_tmp45_);
	_data_->_tmp46_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
	_data_->_tmp47_ = _data_->_tmp46_;
	_data_->_tmp48_ = _data_->codec;
	_data_->_tmp49_ = _data_->decode_element;
	_data_->_tmp50_ = dino_plugins_rtp_codec_util_get_decode_bin_description (_data_->_tmp47_, _data_->media, _data_->_tmp48_, NULL, _data_->_tmp49_, NULL);
	_data_->decode_bin = _data_->_tmp50_;
	while (TRUE) {
		_data_->_tmp51_ = _data_->encode_bin;
		_data_->_tmp52_ = string_to_string (_data_->_tmp51_);
		_data_->_tmp53_ = _data_->decode_bin;
		_data_->_tmp54_ = string_to_string (_data_->_tmp53_);
		_data_->_tmp55_ = g_strconcat (_data_->_tmp52_, " ! ", _data_->_tmp54_, NULL);
		_data_->_tmp56_ = _data_->_tmp55_;
		_data_->_state_ = 2;
		dino_plugins_rtp_module_pipeline_works (_data_->self, _data_->media, _data_->_tmp56_, dino_plugins_rtp_module_is_payload_supported_ready, _data_);
		return FALSE;
		_state_2:
		_data_->_tmp57_ = !(!dino_plugins_rtp_module_pipeline_works_finish (_data_->self, _data_->_res_));
		_g_free0 (_data_->_tmp56_);
		if (_data_->_tmp57_) {
			break;
		}
		_data_->_tmp58_ = _data_->decode_element;
		_data_->_tmp59_ = _data_->codec;
		g_debug ("module.vala:96: %s not suited for decoding %s", _data_->_tmp58_, _data_->_tmp59_);
		_data_->_tmp60_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
		_data_->_tmp61_ = _data_->_tmp60_;
		_data_->_tmp62_ = _data_->decode_element;
		dino_plugins_rtp_codec_util_mark_element_unsupported (_data_->_tmp61_, _data_->_tmp62_);
		_data_->_tmp63_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
		_data_->_tmp64_ = _data_->_tmp63_;
		_data_->_tmp65_ = _data_->codec;
		_data_->_tmp66_ = dino_plugins_rtp_codec_util_get_decode_element_name (_data_->_tmp64_, _data_->media, _data_->_tmp65_);
		_g_free0 (_data_->decode_element);
		_data_->decode_element = _data_->_tmp66_;
		_data_->_tmp67_ = _data_->decode_element;
		if (_data_->_tmp67_ == NULL) {
			_data_->_tmp68_ = _data_->codec;
			g_warning ("module.vala:100: No suitable decoder found for %s", _data_->_tmp68_);
			_data_->_tmp69_ = _data_->self->priv->unsupported_codecs;
			_data_->_tmp70_ = _data_->codec;
			gee_collection_add ((GeeCollection*) _data_->_tmp69_, _data_->_tmp70_);
			_data_->result = FALSE;
			_g_free0 (_data_->decode_bin);
			_g_free0 (_data_->encode_bin);
			_g_free0 (_data_->decode_element);
			_g_free0 (_data_->encode_element);
			_g_free0 (_data_->codec);
			g_task_return_pointer (_data_->_async_result, _data_, NULL);
			if (_data_->_state_ != 0) {
				while (!g_task_get_completed (_data_->_async_result)) {
					g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
				}
			}
			g_object_unref (_data_->_async_result);
			return FALSE;
		}
		_data_->_tmp71_ = dino_plugins_rtp_module_get_codec_util (_data_->self);
		_data_->_tmp72_ = _data_->_tmp71_;
		_data_->_tmp73_ = _data_->codec;
		_data_->_tmp74_ = _data_->decode_element;
		_data_->_tmp75_ = dino_plugins_rtp_codec_util_get_decode_bin_description (_data_->_tmp72_, _data_->media, _data_->_tmp73_, NULL, _data_->_tmp74_, NULL);
		_g_free0 (_data_->decode_bin);
		_data_->decode_bin = _data_->_tmp75_;
	}
	_data_->_tmp76_ = _data_->decode_element;
	_data_->_tmp77_ = _data_->codec;
	g_debug ("module.vala:106: using %s to decode %s", _data_->_tmp76_, _data_->_tmp77_);
	_data_->_tmp78_ = _data_->self->priv->supported_codecs;
	_data_->_tmp79_ = _data_->codec;
	gee_collection_add ((GeeCollection*) _data_->_tmp78_, _data_->_tmp79_);
	_data_->result = TRUE;
	_g_free0 (_data_->decode_bin);
	_g_free0 (_data_->encode_bin);
	_g_free0 (_data_->decode_element);
	_g_free0 (_data_->encode_element);
	_g_free0 (_data_->codec);
	g_task_return_pointer (_data_->_async_result, _data_, NULL);
	if (_data_->_state_ != 0) {
		while (!g_task_get_completed (_data_->_async_result)) {
			g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
		}
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}

static gboolean
dino_plugins_rtp_module_real_is_header_extension_supported (XmppXepJingleRtpModule* base,
                                                            const gchar* media,
                                                            XmppXepJingleRtpHeaderExtension* ext)
{
	DinoPluginsRtpModule * self;
	gboolean _tmp0_ = FALSE;
	gboolean result;
	self = (DinoPluginsRtpModule*) base;
	g_return_val_if_fail (media != NULL, FALSE);
	g_return_val_if_fail (ext != NULL, FALSE);
	if (g_strcmp0 (media, "video") == 0) {
		const gchar* _tmp1_;
		const gchar* _tmp2_;
		_tmp1_ = xmpp_xep_jingle_rtp_header_extension_get_uri (ext);
		_tmp2_ = _tmp1_;
		_tmp0_ = g_strcmp0 (_tmp2_, "urn:3gpp:video-orientation") == 0;
	} else {
		_tmp0_ = FALSE;
	}
	if (_tmp0_) {
		result = TRUE;
		return result;
	}
	result = FALSE;
	return result;
}

static GeeList*
dino_plugins_rtp_module_real_get_suggested_header_extensions (XmppXepJingleRtpModule* base,
                                                              const gchar* media)
{
	DinoPluginsRtpModule * self;
	GeeList* exts = NULL;
	GeeArrayList* _tmp0_;
	GeeList* result;
	self = (DinoPluginsRtpModule*) base;
	g_return_val_if_fail (media != NULL, NULL);
	_tmp0_ = gee_array_list_new (XMPP_XEP_JINGLE_RTP_TYPE_HEADER_EXTENSION, (GBoxedCopyFunc) xmpp_xep_jingle_rtp_header_extension_ref, (GDestroyNotify) xmpp_xep_jingle_rtp_header_extension_unref, NULL, NULL, NULL);
	exts = (GeeList*) _tmp0_;
	if (g_strcmp0 (media, "video") == 0) {
		GeeList* _tmp1_;
		XmppXepJingleRtpHeaderExtension* _tmp2_;
		XmppXepJingleRtpHeaderExtension* _tmp3_;
		_tmp1_ = exts;
		_tmp2_ = xmpp_xep_jingle_rtp_header_extension_new ((guint8) 1, "urn:3gpp:video-orientation");
		_tmp3_ = _tmp2_;
		gee_collection_add ((GeeCollection*) _tmp1_, _tmp3_);
		_xmpp_xep_jingle_rtp_header_extension_unref0 (_tmp3_);
	}
	result = exts;
	return result;
}

static void
dino_plugins_rtp_module_add_if_supported_data_free (gpointer _data)
{
	DinoPluginsRtpModuleAddIfSupportedData* _data_;
	_data_ = _data;
	_g_object_unref0 (_data_->list);
	_g_free0 (_data_->media);
	_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->payload_type);
	_g_object_unref0 (_data_->self);
	g_slice_free (DinoPluginsRtpModuleAddIfSupportedData, _data_);
}

void
dino_plugins_rtp_module_add_if_supported (DinoPluginsRtpModule* self,
                                          GeeList* list,
                                          const gchar* media,
                                          XmppXepJingleRtpPayloadType* payload_type,
                                          GAsyncReadyCallback _callback_,
                                          gpointer _user_data_)
{
	DinoPluginsRtpModuleAddIfSupportedData* _data_;
	DinoPluginsRtpModule* _tmp0_;
	GeeList* _tmp1_;
	gchar* _tmp2_;
	XmppXepJingleRtpPayloadType* _tmp3_;
	g_return_if_fail (self != NULL);
	g_return_if_fail (list != NULL);
	g_return_if_fail (media != NULL);
	g_return_if_fail (payload_type != NULL);
	_data_ = g_slice_new0 (DinoPluginsRtpModuleAddIfSupportedData);
	_data_->_async_result = g_task_new (G_OBJECT (self), NULL, _callback_, _user_data_);
	g_task_set_task_data (_data_->_async_result, _data_, dino_plugins_rtp_module_add_if_supported_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = _g_object_ref0 (list);
	_g_object_unref0 (_data_->list);
	_data_->list = _tmp1_;
	_tmp2_ = g_strdup (media);
	_g_free0 (_data_->media);
	_data_->media = _tmp2_;
	_tmp3_ = _xmpp_xep_jingle_rtp_payload_type_ref0 (payload_type);
	_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->payload_type);
	_data_->payload_type = _tmp3_;
	dino_plugins_rtp_module_add_if_supported_co (_data_);
}

void
dino_plugins_rtp_module_add_if_supported_finish (DinoPluginsRtpModule* self,
                                                 GAsyncResult* _res_)
{
	DinoPluginsRtpModuleAddIfSupportedData* _data_;
	_data_ = g_task_propagate_pointer (G_TASK (_res_), NULL);
}

static void
dino_plugins_rtp_module_add_if_supported_ready (GObject* source_object,
                                                GAsyncResult* _res_,
                                                gpointer _user_data_)
{
	DinoPluginsRtpModuleAddIfSupportedData* _data_;
	_data_ = _user_data_;
	_data_->_source_object_ = source_object;
	_data_->_res_ = _res_;
	dino_plugins_rtp_module_add_if_supported_co (_data_);
}

static gboolean
dino_plugins_rtp_module_add_if_supported_co (DinoPluginsRtpModuleAddIfSupportedData* _data_)
{
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_state_ = 1;
	xmpp_xep_jingle_rtp_module_is_payload_supported ((XmppXepJingleRtpModule*) _data_->self, _data_->media, _data_->payload_type, dino_plugins_rtp_module_add_if_supported_ready, _data_);
	return FALSE;
	_state_1:
	if (xmpp_xep_jingle_rtp_module_is_payload_supported_finish ((XmppXepJingleRtpModule*) _data_->self, _data_->_res_)) {
		gee_collection_add ((GeeCollection*) _data_->list, _data_->payload_type);
	}
	g_task_return_pointer (_data_->_async_result, _data_, NULL);
	if (_data_->_state_ != 0) {
		while (!g_task_get_completed (_data_->_async_result)) {
			g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
		}
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}

static void
dino_plugins_rtp_module_real_get_supported_payloads_data_free (gpointer _data)
{
	DinoPluginsRtpModuleGetSupportedPayloadsData* _data_;
	_data_ = _data;
	_g_free0 (_data_->media);
	_g_object_unref0 (_data_->result);
	_g_object_unref0 (_data_->self);
	g_slice_free (DinoPluginsRtpModuleGetSupportedPayloadsData, _data_);
}

static void
dino_plugins_rtp_module_real_get_supported_payloads (XmppXepJingleRtpModule* base,
                                                     const gchar* media,
                                                     GAsyncReadyCallback _callback_,
                                                     gpointer _user_data_)
{
	DinoPluginsRtpModule * self;
	DinoPluginsRtpModuleGetSupportedPayloadsData* _data_;
	DinoPluginsRtpModule* _tmp0_;
	gchar* _tmp1_;
	g_return_if_fail (media != NULL);
	self = (DinoPluginsRtpModule*) base;
	_data_ = g_slice_new0 (DinoPluginsRtpModuleGetSupportedPayloadsData);
	_data_->_async_result = g_task_new (G_OBJECT (self), NULL, _callback_, _user_data_);
	g_task_set_task_data (_data_->_async_result, _data_, dino_plugins_rtp_module_real_get_supported_payloads_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = g_strdup (media);
	_g_free0 (_data_->media);
	_data_->media = _tmp1_;
	dino_plugins_rtp_module_real_get_supported_payloads_co (_data_);
}

static GeeList*
dino_plugins_rtp_module_get_supported_payloads_finish (XmppXepJingleRtpModule* base,
                                                       GAsyncResult* _res_)
{
	GeeList* result;
	DinoPluginsRtpModuleGetSupportedPayloadsData* _data_;
	_data_ = g_task_propagate_pointer (G_TASK (_res_), NULL);
	result = _data_->result;
	_data_->result = NULL;
	return result;
}

static gboolean
_xmpp_xep_jingle_rtp_payload_type_equals_func_gee_equal_data_func (gconstpointer a,
                                                                   gconstpointer b,
                                                                   gpointer self)
{
	gboolean result;
	result = xmpp_xep_jingle_rtp_payload_type_equals_func ((XmppXepJingleRtpPayloadType*) a, (XmppXepJingleRtpPayloadType*) b);
	return result;
}

static void
dino_plugins_rtp_module_get_supported_payloads_ready (GObject* source_object,
                                                      GAsyncResult* _res_,
                                                      gpointer _user_data_)
{
	DinoPluginsRtpModuleGetSupportedPayloadsData* _data_;
	_data_ = _user_data_;
	_data_->_source_object_ = source_object;
	_data_->_res_ = _res_;
	dino_plugins_rtp_module_real_get_supported_payloads_co (_data_);
}

static gboolean
dino_plugins_rtp_module_real_get_supported_payloads_co (DinoPluginsRtpModuleGetSupportedPayloadsData* _data_)
{
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		case 2:
		goto _state_2;
		case 3:
		goto _state_3;
		case 4:
		goto _state_4;
		case 5:
		goto _state_5;
		case 6:
		goto _state_6;
		case 7:
		goto _state_7;
		case 8:
		goto _state_8;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	_data_->_tmp0_ = gee_array_list_new (XMPP_XEP_JINGLE_RTP_TYPE_PAYLOAD_TYPE, (GBoxedCopyFunc) xmpp_xep_jingle_rtp_payload_type_ref, (GDestroyNotify) xmpp_xep_jingle_rtp_payload_type_unref, _xmpp_xep_jingle_rtp_payload_type_equals_func_gee_equal_data_func, NULL, NULL);
	_data_->list = (GeeList*) _data_->_tmp0_;
	if (g_strcmp0 (_data_->media, "audio") == 0) {
		_data_->_tmp1_ = g_strdup ("opus");
		_data_->_tmp2_ = NULL;
		_data_->_tmp2_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp2_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp2_, (guint32) 48000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp2_, _data_->_tmp1_);
		_g_free0 (_data_->_tmp1_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp2_, (guint8) 111);
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp2_, (guint8) 2);
		_data_->opus = _data_->_tmp2_;
		_data_->_tmp3_ = _data_->opus;
		_data_->_tmp4_ = _data_->_tmp3_->parameters;
		gee_map_set (_data_->_tmp4_, "useinbandfec", "1");
		_data_->_tmp5_ = g_strdup ("speex");
		_data_->_tmp6_ = NULL;
		_data_->_tmp6_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp6_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp6_, (guint32) 32000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp6_, _data_->_tmp5_);
		_g_free0 (_data_->_tmp5_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp6_, (guint8) 112);
		_data_->speex32 = _data_->_tmp6_;
		_data_->_tmp7_ = g_strdup ("speex");
		_data_->_tmp8_ = NULL;
		_data_->_tmp8_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp8_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp8_, (guint32) 16000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp8_, _data_->_tmp7_);
		_g_free0 (_data_->_tmp7_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp8_, (guint8) 113);
		_data_->speex16 = _data_->_tmp8_;
		_data_->_tmp9_ = g_strdup ("speex");
		_data_->_tmp10_ = NULL;
		_data_->_tmp10_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp10_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp10_, (guint32) 8000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp10_, _data_->_tmp9_);
		_g_free0 (_data_->_tmp9_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp10_, (guint8) 114);
		_data_->speex8 = _data_->_tmp10_;
		_data_->_tmp11_ = g_strdup ("G722");
		_data_->_tmp12_ = NULL;
		_data_->_tmp12_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp12_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp12_, (guint32) 8000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp12_, _data_->_tmp11_);
		_g_free0 (_data_->_tmp11_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp12_, (guint8) 9);
		_data_->g722 = _data_->_tmp12_;
		_data_->_tmp13_ = g_strdup ("PCMU");
		_data_->_tmp14_ = NULL;
		_data_->_tmp14_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp14_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp14_, (guint32) 8000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp14_, _data_->_tmp13_);
		_g_free0 (_data_->_tmp13_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp14_, (guint8) 0);
		_data_->pcmu = _data_->_tmp14_;
		_data_->_tmp15_ = g_strdup ("PCMA");
		_data_->_tmp16_ = NULL;
		_data_->_tmp16_ = xmpp_xep_jingle_rtp_payload_type_new ();
		xmpp_xep_jingle_rtp_payload_type_set_channels (_data_->_tmp16_, (guint8) 1);
		xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp16_, (guint32) 8000);
		xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp16_, _data_->_tmp15_);
		_g_free0 (_data_->_tmp15_);
		xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp16_, (guint8) 8);
		_data_->pcma = _data_->_tmp16_;
		_data_->_tmp17_ = _data_->list;
		_data_->_tmp18_ = _data_->opus;
		_data_->_state_ = 1;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp17_, _data_->media, _data_->_tmp18_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_1:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_data_->_tmp19_ = _data_->list;
		_data_->_tmp20_ = _data_->speex32;
		_data_->_state_ = 2;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp19_, _data_->media, _data_->_tmp20_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_2:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_data_->_tmp21_ = _data_->list;
		_data_->_tmp22_ = _data_->speex16;
		_data_->_state_ = 3;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp21_, _data_->media, _data_->_tmp22_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_3:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_data_->_tmp23_ = _data_->list;
		_data_->_tmp24_ = _data_->speex8;
		_data_->_state_ = 4;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp23_, _data_->media, _data_->_tmp24_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_4:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_data_->_tmp25_ = _data_->list;
		_data_->_tmp26_ = _data_->g722;
		_data_->_state_ = 5;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp25_, _data_->media, _data_->_tmp26_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_5:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_data_->_tmp27_ = _data_->list;
		_data_->_tmp28_ = _data_->pcmu;
		_data_->_state_ = 6;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp27_, _data_->media, _data_->_tmp28_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_6:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_data_->_tmp29_ = _data_->list;
		_data_->_tmp30_ = _data_->pcma;
		_data_->_state_ = 7;
		dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp29_, _data_->media, _data_->_tmp30_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
		return FALSE;
		_state_7:
		dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->pcma);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->pcmu);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->g722);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->speex8);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->speex16);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->speex32);
		_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->opus);
	} else {
		if (g_strcmp0 (_data_->media, "video") == 0) {
			_data_->_tmp31_ = gee_array_list_new (XMPP_XEP_JINGLE_RTP_TYPE_RTCP_FEEDBACK, (GBoxedCopyFunc) xmpp_xep_jingle_rtp_rtcp_feedback_ref, (GDestroyNotify) xmpp_xep_jingle_rtp_rtcp_feedback_unref, NULL, NULL, NULL);
			_data_->rtcp_fbs = _data_->_tmp31_;
			_data_->_tmp32_ = _data_->rtcp_fbs;
			_data_->_tmp33_ = xmpp_xep_jingle_rtp_rtcp_feedback_new ("goog-remb", NULL);
			_data_->_tmp34_ = _data_->_tmp33_;
			gee_abstract_collection_add ((GeeAbstractCollection*) _data_->_tmp32_, _data_->_tmp34_);
			_xmpp_xep_jingle_rtp_rtcp_feedback_unref0 (_data_->_tmp34_);
			_data_->_tmp35_ = _data_->rtcp_fbs;
			_data_->_tmp36_ = xmpp_xep_jingle_rtp_rtcp_feedback_new ("ccm", "fir");
			_data_->_tmp37_ = _data_->_tmp36_;
			gee_abstract_collection_add ((GeeAbstractCollection*) _data_->_tmp35_, _data_->_tmp37_);
			_xmpp_xep_jingle_rtp_rtcp_feedback_unref0 (_data_->_tmp37_);
			_data_->_tmp38_ = _data_->rtcp_fbs;
			_data_->_tmp39_ = xmpp_xep_jingle_rtp_rtcp_feedback_new ("nack", NULL);
			_data_->_tmp40_ = _data_->_tmp39_;
			gee_abstract_collection_add ((GeeAbstractCollection*) _data_->_tmp38_, _data_->_tmp40_);
			_xmpp_xep_jingle_rtp_rtcp_feedback_unref0 (_data_->_tmp40_);
			_data_->_tmp41_ = _data_->rtcp_fbs;
			_data_->_tmp42_ = xmpp_xep_jingle_rtp_rtcp_feedback_new ("nack", "pli");
			_data_->_tmp43_ = _data_->_tmp42_;
			gee_abstract_collection_add ((GeeAbstractCollection*) _data_->_tmp41_, _data_->_tmp43_);
			_xmpp_xep_jingle_rtp_rtcp_feedback_unref0 (_data_->_tmp43_);
			_data_->_tmp44_ = g_strdup ("VP8");
			_data_->_tmp45_ = NULL;
			_data_->_tmp45_ = xmpp_xep_jingle_rtp_payload_type_new ();
			xmpp_xep_jingle_rtp_payload_type_set_clockrate (_data_->_tmp45_, (guint32) 90000);
			xmpp_xep_jingle_rtp_payload_type_set_name (_data_->_tmp45_, _data_->_tmp44_);
			_g_free0 (_data_->_tmp44_);
			xmpp_xep_jingle_rtp_payload_type_set_id (_data_->_tmp45_, (guint8) 98);
			_data_->vp8 = _data_->_tmp45_;
			_data_->_tmp46_ = _data_->vp8;
			_data_->_tmp47_ = _data_->_tmp46_->rtcp_fbs;
			_data_->_tmp48_ = _data_->rtcp_fbs;
			gee_collection_add_all ((GeeCollection*) _data_->_tmp47_, (GeeCollection*) _data_->_tmp48_);
			_data_->_tmp49_ = _data_->list;
			_data_->_tmp50_ = _data_->vp8;
			_data_->_state_ = 8;
			dino_plugins_rtp_module_add_if_supported (_data_->self, _data_->_tmp49_, _data_->media, _data_->_tmp50_, dino_plugins_rtp_module_get_supported_payloads_ready, _data_);
			return FALSE;
			_state_8:
			dino_plugins_rtp_module_add_if_supported_finish (_data_->self, _data_->_res_);
			_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->vp8);
			_g_object_unref0 (_data_->rtcp_fbs);
		} else {
			g_warning ("module.vala:169: Unsupported media type: %s", _data_->media);
		}
	}
	_data_->result = _data_->list;
	g_task_return_pointer (_data_->_async_result, _data_, NULL);
	if (_data_->_state_ != 0) {
		while (!g_task_get_completed (_data_->_async_result)) {
			g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
		}
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}

static void
dino_plugins_rtp_module_real_pick_payload_type_data_free (gpointer _data)
{
	DinoPluginsRtpModulePickPayloadTypeData* _data_;
	_data_ = _data;
	_g_free0 (_data_->media);
	_g_object_unref0 (_data_->payloads);
	_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->result);
	_g_object_unref0 (_data_->self);
	g_slice_free (DinoPluginsRtpModulePickPayloadTypeData, _data_);
}

static void
dino_plugins_rtp_module_real_pick_payload_type (XmppXepJingleRtpModule* base,
                                                const gchar* media,
                                                GeeList* payloads,
                                                GAsyncReadyCallback _callback_,
                                                gpointer _user_data_)
{
	DinoPluginsRtpModule * self;
	DinoPluginsRtpModulePickPayloadTypeData* _data_;
	DinoPluginsRtpModule* _tmp0_;
	gchar* _tmp1_;
	GeeList* _tmp2_;
	g_return_if_fail (media != NULL);
	g_return_if_fail (payloads != NULL);
	self = (DinoPluginsRtpModule*) base;
	_data_ = g_slice_new0 (DinoPluginsRtpModulePickPayloadTypeData);
	_data_->_async_result = g_task_new (G_OBJECT (self), NULL, _callback_, _user_data_);
	g_task_set_task_data (_data_->_async_result, _data_, dino_plugins_rtp_module_real_pick_payload_type_data_free);
	_tmp0_ = _g_object_ref0 (self);
	_data_->self = _tmp0_;
	_tmp1_ = g_strdup (media);
	_g_free0 (_data_->media);
	_data_->media = _tmp1_;
	_tmp2_ = _g_object_ref0 (payloads);
	_g_object_unref0 (_data_->payloads);
	_data_->payloads = _tmp2_;
	dino_plugins_rtp_module_real_pick_payload_type_co (_data_);
}

static XmppXepJingleRtpPayloadType*
dino_plugins_rtp_module_pick_payload_type_finish (XmppXepJingleRtpModule* base,
                                                  GAsyncResult* _res_)
{
	XmppXepJingleRtpPayloadType* result;
	DinoPluginsRtpModulePickPayloadTypeData* _data_;
	_data_ = g_task_propagate_pointer (G_TASK (_res_), NULL);
	result = _data_->result;
	_data_->result = NULL;
	return result;
}

static void
dino_plugins_rtp_module_pick_payload_type_ready (GObject* source_object,
                                                 GAsyncResult* _res_,
                                                 gpointer _user_data_)
{
	DinoPluginsRtpModulePickPayloadTypeData* _data_;
	_data_ = _user_data_;
	_data_->_source_object_ = source_object;
	_data_->_res_ = _res_;
	dino_plugins_rtp_module_real_pick_payload_type_co (_data_);
}

static gboolean
dino_plugins_rtp_module_real_pick_payload_type_co (DinoPluginsRtpModulePickPayloadTypeData* _data_)
{
	switch (_data_->_state_) {
		case 0:
		goto _state_0;
		case 1:
		goto _state_1;
		default:
		g_assert_not_reached ();
	}
	_state_0:
	if (g_strcmp0 (_data_->media, "audio") == 0) {
		_data_->_tmp0_ = TRUE;
	} else {
		_data_->_tmp0_ = g_strcmp0 (_data_->media, "video") == 0;
	}
	if (_data_->_tmp0_) {
		{
			_data_->_type_list = _data_->payloads;
			_data_->_tmp1_ = _data_->_type_list;
			_data_->_tmp2_ = gee_collection_get_size ((GeeCollection*) _data_->_tmp1_);
			_data_->_tmp3_ = _data_->_tmp2_;
			_data_->_type_size = _data_->_tmp3_;
			_data_->_type_index = -1;
			while (TRUE) {
				_data_->_type_index = _data_->_type_index + 1;
				_data_->_tmp4_ = _data_->_type_index;
				_data_->_tmp5_ = _data_->_type_size;
				if (!(_data_->_tmp4_ < _data_->_tmp5_)) {
					break;
				}
				_data_->_tmp6_ = _data_->_type_list;
				_data_->_tmp7_ = gee_list_get (_data_->_tmp6_, _data_->_type_index);
				_data_->type = (XmppXepJingleRtpPayloadType*) _data_->_tmp7_;
				_data_->_tmp8_ = _data_->type;
				_data_->_state_ = 1;
				xmpp_xep_jingle_rtp_module_is_payload_supported ((XmppXepJingleRtpModule*) _data_->self, _data_->media, _data_->_tmp8_, dino_plugins_rtp_module_pick_payload_type_ready, _data_);
				return FALSE;
				_state_1:
				if (xmpp_xep_jingle_rtp_module_is_payload_supported_finish ((XmppXepJingleRtpModule*) _data_->self, _data_->_res_)) {
					_data_->_tmp9_ = _data_->type;
					_data_->_tmp10_ = xmpp_xep_jingle_rtp_payload_type_clone (_data_->_tmp9_);
					_data_->_tmp11_ = _data_->_tmp10_;
					_data_->_tmp12_ = dino_plugins_rtp_module_adjust_payload_type (_data_->self, _data_->media, _data_->_tmp11_);
					_data_->_tmp13_ = _data_->_tmp12_;
					_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->_tmp11_);
					_data_->result = _data_->_tmp13_;
					_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->type);
					g_task_return_pointer (_data_->_async_result, _data_, NULL);
					if (_data_->_state_ != 0) {
						while (!g_task_get_completed (_data_->_async_result)) {
							g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
						}
					}
					g_object_unref (_data_->_async_result);
					return FALSE;
				}
				_xmpp_xep_jingle_rtp_payload_type_unref0 (_data_->type);
			}
		}
	} else {
		g_warning ("module.vala:180: Unsupported media type: %s", _data_->media);
	}
	_data_->result = NULL;
	g_task_return_pointer (_data_->_async_result, _data_, NULL);
	if (_data_->_state_ != 0) {
		while (!g_task_get_completed (_data_->_async_result)) {
			g_main_context_iteration (g_task_get_context (_data_->_async_result), TRUE);
		}
	}
	g_object_unref (_data_->_async_result);
	return FALSE;
}

XmppXepJingleRtpPayloadType*
dino_plugins_rtp_module_adjust_payload_type (DinoPluginsRtpModule* self,
                                             const gchar* media,
                                             XmppXepJingleRtpPayloadType* type)
{
	GeeIterator* iter = NULL;
	GeeList* _tmp0_;
	GeeIterator* _tmp1_;
	XmppXepJingleRtpPayloadType* _tmp28_;
	XmppXepJingleRtpPayloadType* result;
	g_return_val_if_fail (self != NULL, NULL);
	g_return_val_if_fail (media != NULL, NULL);
	g_return_val_if_fail (type != NULL, NULL);
	_tmp0_ = type->rtcp_fbs;
	_tmp1_ = gee_iterable_iterator ((GeeIterable*) _tmp0_);
	iter = _tmp1_;
	while (TRUE) {
		GeeIterator* _tmp2_;
		XmppXepJingleRtpRtcpFeedback* fb = NULL;
		GeeIterator* _tmp3_;
		gpointer _tmp4_;
		XmppXepJingleRtpRtcpFeedback* _tmp5_;
		const gchar* _tmp6_;
		const gchar* _tmp7_;
		const gchar* _tmp8_;
		GQuark _tmp10_ = 0U;
		static GQuark _tmp9_label0 = 0;
		static GQuark _tmp9_label1 = 0;
		static GQuark _tmp9_label2 = 0;
		_tmp2_ = iter;
		if (!gee_iterator_next (_tmp2_)) {
			break;
		}
		_tmp3_ = iter;
		_tmp4_ = gee_iterator_get (_tmp3_);
		fb = (XmppXepJingleRtpRtcpFeedback*) _tmp4_;
		_tmp5_ = fb;
		_tmp6_ = xmpp_xep_jingle_rtp_rtcp_feedback_get_type_ (_tmp5_);
		_tmp7_ = _tmp6_;
		_tmp8_ = _tmp7_;
		_tmp10_ = (NULL == _tmp8_) ? 0 : g_quark_from_string (_tmp8_);
		if (_tmp10_ == ((0 != _tmp9_label0) ? _tmp9_label0 : (_tmp9_label0 = g_quark_from_static_string ("goog-remb")))) {
			switch (0) {
				default:
				{
					XmppXepJingleRtpRtcpFeedback* _tmp11_;
					const gchar* _tmp12_;
					const gchar* _tmp13_;
					_tmp11_ = fb;
					_tmp12_ = xmpp_xep_jingle_rtp_rtcp_feedback_get_subtype (_tmp11_);
					_tmp13_ = _tmp12_;
					if (_tmp13_ != NULL) {
						GeeIterator* _tmp14_;
						_tmp14_ = iter;
						gee_iterator_remove (_tmp14_);
					}
					break;
				}
			}
		} else if (_tmp10_ == ((0 != _tmp9_label1) ? _tmp9_label1 : (_tmp9_label1 = g_quark_from_static_string ("ccm")))) {
			switch (0) {
				default:
				{
					XmppXepJingleRtpRtcpFeedback* _tmp15_;
					const gchar* _tmp16_;
					const gchar* _tmp17_;
					_tmp15_ = fb;
					_tmp16_ = xmpp_xep_jingle_rtp_rtcp_feedback_get_subtype (_tmp15_);
					_tmp17_ = _tmp16_;
					if (g_strcmp0 (_tmp17_, "fir") != 0) {
						GeeIterator* _tmp18_;
						_tmp18_ = iter;
						gee_iterator_remove (_tmp18_);
					}
					break;
				}
			}
		} else if (_tmp10_ == ((0 != _tmp9_label2) ? _tmp9_label2 : (_tmp9_label2 = g_quark_from_static_string ("nack")))) {
			switch (0) {
				default:
				{
					gboolean _tmp19_ = FALSE;
					XmppXepJingleRtpRtcpFeedback* _tmp20_;
					const gchar* _tmp21_;
					const gchar* _tmp22_;
					_tmp20_ = fb;
					_tmp21_ = xmpp_xep_jingle_rtp_rtcp_feedback_get_subtype (_tmp20_);
					_tmp22_ = _tmp21_;
					if (_tmp22_ != NULL) {
						XmppXepJingleRtpRtcpFeedback* _tmp23_;
						const gchar* _tmp24_;
						const gchar* _tmp25_;
						_tmp23_ = fb;
						_tmp24_ = xmpp_xep_jingle_rtp_rtcp_feedback_get_subtype (_tmp23_);
						_tmp25_ = _tmp24_;
						_tmp19_ = g_strcmp0 (_tmp25_, "pli") != 0;
					} else {
						_tmp19_ = FALSE;
					}
					if (_tmp19_) {
						GeeIterator* _tmp26_;
						_tmp26_ = iter;
						gee_iterator_remove (_tmp26_);
					}
					break;
				}
			}
		} else {
			switch (0) {
				default:
				{
					GeeIterator* _tmp27_;
					_tmp27_ = iter;
					gee_iterator_remove (_tmp27_);
					break;
				}
			}
		}
		_xmpp_xep_jingle_rtp_rtcp_feedback_unref0 (fb);
	}
	_tmp28_ = _xmpp_xep_jingle_rtp_payload_type_ref0 (type);
	result = _tmp28_;
	_g_object_unref0 (iter);
	return result;
}

static XmppXepJingleRtpStream*
dino_plugins_rtp_module_real_create_stream (XmppXepJingleRtpModule* base,
                                            XmppXepJingleContent* content)
{
	DinoPluginsRtpModule * self;
	DinoPluginsRtpPlugin* _tmp0_;
	DinoPluginsRtpStream* _tmp1_;
	XmppXepJingleRtpStream* result;
	self = (DinoPluginsRtpModule*) base;
	g_return_val_if_fail (content != NULL, NULL);
	_tmp0_ = self->priv->_plugin;
	_tmp1_ = dino_plugins_rtp_plugin_open_stream (_tmp0_, content);
	result = (XmppXepJingleRtpStream*) _tmp1_;
	return result;
}

static void
dino_plugins_rtp_module_real_close_stream (XmppXepJingleRtpModule* base,
                                           XmppXepJingleRtpStream* stream)
{
	DinoPluginsRtpModule * self;
	DinoPluginsRtpStream* rtp_stream = NULL;
	DinoPluginsRtpStream* _tmp0_;
	DinoPluginsRtpPlugin* _tmp1_;
	self = (DinoPluginsRtpModule*) base;
	g_return_if_fail (stream != NULL);
	_tmp0_ = _g_object_ref0 (DINO_PLUGINS_RTP_IS_STREAM (stream) ? ((DinoPluginsRtpStream*) stream) : NULL);
	rtp_stream = _tmp0_;
	_tmp1_ = self->priv->_plugin;
	dino_plugins_rtp_plugin_close_stream (_tmp1_, rtp_stream);
	_g_object_unref0 (rtp_stream);
}

static XmppXepJingleRtpCrypto*
dino_plugins_rtp_module_real_generate_local_crypto (XmppXepJingleRtpModule* base)
{
	DinoPluginsRtpModule * self;
	guint8* key_and_salt = NULL;
	guint8* _tmp0_;
	gint key_and_salt_length1;
	gint _key_and_salt_size_;
	XmppXepJingleRtpCrypto* _tmp1_;
	XmppXepJingleRtpCrypto* result;
	self = (DinoPluginsRtpModule*) base;
	_tmp0_ = g_new0 (guint8, 30);
	key_and_salt = _tmp0_;
	key_and_salt_length1 = 30;
	_key_and_salt_size_ = key_and_salt_length1;
	crypto_randomize (key_and_salt, (gint) key_and_salt_length1);
	_tmp1_ = xmpp_xep_jingle_rtp_crypto_create (XMPP_XEP_JINGLE_RTP_CRYPTO_AES_CM_128_HMAC_SHA1_80, key_and_salt, (gint) key_and_salt_length1, NULL, "1");
	result = _tmp1_;
	key_and_salt = (g_free (key_and_salt), NULL);
	return result;
}

static XmppXepJingleRtpCrypto*
dino_plugins_rtp_module_real_pick_remote_crypto (XmppXepJingleRtpModule* base,
                                                 GeeList* cryptos)
{
	DinoPluginsRtpModule * self;
	XmppXepJingleRtpCrypto* result;
	self = (DinoPluginsRtpModule*) base;
	g_return_val_if_fail (cryptos != NULL, NULL);
	{
		GeeList* _crypto_list = NULL;
		gint _crypto_size = 0;
		GeeList* _tmp0_;
		gint _tmp1_;
		gint _tmp2_;
		gint _crypto_index = 0;
		_crypto_list = cryptos;
		_tmp0_ = _crypto_list;
		_tmp1_ = gee_collection_get_size ((GeeCollection*) _tmp0_);
		_tmp2_ = _tmp1_;
		_crypto_size = _tmp2_;
		_crypto_index = -1;
		while (TRUE) {
			gint _tmp3_;
			gint _tmp4_;
			XmppXepJingleRtpCrypto* crypto = NULL;
			GeeList* _tmp5_;
			gpointer _tmp6_;
			XmppXepJingleRtpCrypto* _tmp7_;
			gboolean _tmp8_;
			gboolean _tmp9_;
			_crypto_index = _crypto_index + 1;
			_tmp3_ = _crypto_index;
			_tmp4_ = _crypto_size;
			if (!(_tmp3_ < _tmp4_)) {
				break;
			}
			_tmp5_ = _crypto_list;
			_tmp6_ = gee_list_get (_tmp5_, _crypto_index);
			crypto = (XmppXepJingleRtpCrypto*) _tmp6_;
			_tmp7_ = crypto;
			_tmp8_ = xmpp_xep_jingle_rtp_crypto_get_is_valid (_tmp7_);
			_tmp9_ = _tmp8_;
			if (_tmp9_) {
				result = crypto;
				return result;
			}
			_xmpp_xep_jingle_rtp_crypto_unref0 (crypto);
		}
	}
	result = NULL;
	return result;
}

static XmppXepJingleRtpCrypto*
dino_plugins_rtp_module_real_pick_local_crypto (XmppXepJingleRtpModule* base,
                                                XmppXepJingleRtpCrypto* remote)
{
	DinoPluginsRtpModule * self;
	gboolean _tmp0_ = FALSE;
	guint8* key_and_salt = NULL;
	guint8* _tmp3_;
	gint key_and_salt_length1;
	gint _key_and_salt_size_;
	guint8* _tmp4_;
	gint _tmp4__length1;
	guint8* _tmp5_;
	gint _tmp5__length1;
	XmppXepJingleRtpCrypto* _tmp6_;
	XmppXepJingleRtpCrypto* result;
	self = (DinoPluginsRtpModule*) base;
	if (remote == NULL) {
		_tmp0_ = TRUE;
	} else {
		gboolean _tmp1_;
		gboolean _tmp2_;
		_tmp1_ = xmpp_xep_jingle_rtp_crypto_get_is_valid (remote);
		_tmp2_ = _tmp1_;
		_tmp0_ = !_tmp2_;
	}
	if (_tmp0_) {
		result = NULL;
		return result;
	}
	_tmp3_ = g_new0 (guint8, 30);
	key_and_salt = _tmp3_;
	key_and_salt_length1 = 30;
	_key_and_salt_size_ = key_and_salt_length1;
	_tmp4_ = key_and_salt;
	_tmp4__length1 = key_and_salt_length1;
	crypto_randomize (_tmp4_, (gint) _tmp4__length1);
	_tmp5_ = key_and_salt;
	_tmp5__length1 = key_and_salt_length1;
	_tmp6_ = xmpp_xep_jingle_rtp_crypto_rekey (remote, _tmp5_, (gint) _tmp5__length1);
	result = _tmp6_;
	key_and_salt = (g_free (key_and_salt), NULL);
	return result;
}

DinoPluginsRtpPlugin*
dino_plugins_rtp_module_get_plugin (DinoPluginsRtpModule* self)
{
	DinoPluginsRtpPlugin* result;
	DinoPluginsRtpPlugin* _tmp0_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_plugin;
	result = _tmp0_;
	return result;
}

static void
dino_plugins_rtp_module_set_plugin (DinoPluginsRtpModule* self,
                                    DinoPluginsRtpPlugin* value)
{
	DinoPluginsRtpPlugin* old_value;
	g_return_if_fail (self != NULL);
	old_value = dino_plugins_rtp_module_get_plugin (self);
	if (old_value != value) {
		DinoPluginsRtpPlugin* _tmp0_;
		_tmp0_ = _g_object_ref0 (value);
		_g_object_unref0 (self->priv->_plugin);
		self->priv->_plugin = _tmp0_;
		g_object_notify_by_pspec ((GObject *) self, dino_plugins_rtp_module_properties[DINO_PLUGINS_RTP_MODULE_PLUGIN_PROPERTY]);
	}
}

DinoPluginsRtpCodecUtil*
dino_plugins_rtp_module_get_codec_util (DinoPluginsRtpModule* self)
{
	DinoPluginsRtpCodecUtil* result;
	DinoPluginsRtpPlugin* _tmp0_;
	DinoPluginsRtpCodecUtil* _tmp1_;
	DinoPluginsRtpCodecUtil* _tmp2_;
	g_return_val_if_fail (self != NULL, NULL);
	_tmp0_ = self->priv->_plugin;
	_tmp1_ = dino_plugins_rtp_plugin_get_codec_util (_tmp0_);
	_tmp2_ = _tmp1_;
	result = _tmp2_;
	return result;
}

static void
dino_plugins_rtp_module_class_init (DinoPluginsRtpModuleClass * klass,
                                    gpointer klass_data)
{
	dino_plugins_rtp_module_parent_class = g_type_class_peek_parent (klass);
	g_type_class_adjust_private_offset (klass, &DinoPluginsRtpModule_private_offset);
	((XmppXepJingleRtpModuleClass *) klass)->is_payload_supported = (void (*) (XmppXepJingleRtpModule*, const gchar*, XmppXepJingleRtpPayloadType*, GAsyncReadyCallback, gpointer)) dino_plugins_rtp_module_real_is_payload_supported;
	((XmppXepJingleRtpModuleClass *) klass)->is_payload_supported_finish = (gboolean (*) (XmppXepJingleRtpModule*, GAsyncResult*)) dino_plugins_rtp_module_is_payload_supported_finish;
	((XmppXepJingleRtpModuleClass *) klass)->is_header_extension_supported = (gboolean (*) (XmppXepJingleRtpModule*, const gchar*, XmppXepJingleRtpHeaderExtension*)) dino_plugins_rtp_module_real_is_header_extension_supported;
	((XmppXepJingleRtpModuleClass *) klass)->get_suggested_header_extensions = (GeeList* (*) (XmppXepJingleRtpModule*, const gchar*)) dino_plugins_rtp_module_real_get_suggested_header_extensions;
	((XmppXepJingleRtpModuleClass *) klass)->get_supported_payloads = (void (*) (XmppXepJingleRtpModule*, const gchar*, GAsyncReadyCallback, gpointer)) dino_plugins_rtp_module_real_get_supported_payloads;
	((XmppXepJingleRtpModuleClass *) klass)->get_supported_payloads_finish = (GeeList* (*) (XmppXepJingleRtpModule*, GAsyncResult*)) dino_plugins_rtp_module_get_supported_payloads_finish;
	((XmppXepJingleRtpModuleClass *) klass)->pick_payload_type = (void (*) (XmppXepJingleRtpModule*, const gchar*, GeeList*, GAsyncReadyCallback, gpointer)) dino_plugins_rtp_module_real_pick_payload_type;
	((XmppXepJingleRtpModuleClass *) klass)->pick_payload_type_finish = (XmppXepJingleRtpPayloadType* (*) (XmppXepJingleRtpModule*, GAsyncResult*)) dino_plugins_rtp_module_pick_payload_type_finish;
	((XmppXepJingleRtpModuleClass *) klass)->create_stream = (XmppXepJingleRtpStream* (*) (XmppXepJingleRtpModule*, XmppXepJingleContent*)) dino_plugins_rtp_module_real_create_stream;
	((XmppXepJingleRtpModuleClass *) klass)->close_stream = (void (*) (XmppXepJingleRtpModule*, XmppXepJingleRtpStream*)) dino_plugins_rtp_module_real_close_stream;
	((XmppXepJingleRtpModuleClass *) klass)->generate_local_crypto = (XmppXepJingleRtpCrypto* (*) (XmppXepJingleRtpModule*)) dino_plugins_rtp_module_real_generate_local_crypto;
	((XmppXepJingleRtpModuleClass *) klass)->pick_remote_crypto = (XmppXepJingleRtpCrypto* (*) (XmppXepJingleRtpModule*, GeeList*)) dino_plugins_rtp_module_real_pick_remote_crypto;
	((XmppXepJingleRtpModuleClass *) klass)->pick_local_crypto = (XmppXepJingleRtpCrypto* (*) (XmppXepJingleRtpModule*, XmppXepJingleRtpCrypto*)) dino_plugins_rtp_module_real_pick_local_crypto;
	G_OBJECT_CLASS (klass)->get_property = _vala_dino_plugins_rtp_module_get_property;
	G_OBJECT_CLASS (klass)->set_property = _vala_dino_plugins_rtp_module_set_property;
	G_OBJECT_CLASS (klass)->finalize = dino_plugins_rtp_module_finalize;
	g_object_class_install_property (G_OBJECT_CLASS (klass), DINO_PLUGINS_RTP_MODULE_PLUGIN_PROPERTY, dino_plugins_rtp_module_properties[DINO_PLUGINS_RTP_MODULE_PLUGIN_PROPERTY] = g_param_spec_object ("plugin", "plugin", "plugin", DINO_PLUGINS_RTP_TYPE_PLUGIN, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
	g_object_class_install_property (G_OBJECT_CLASS (klass), DINO_PLUGINS_RTP_MODULE_CODEC_UTIL_PROPERTY, dino_plugins_rtp_module_properties[DINO_PLUGINS_RTP_MODULE_CODEC_UTIL_PROPERTY] = dino_plugins_rtp_param_spec_codec_util ("codec-util", "codec-util", "codec-util", DINO_PLUGINS_RTP_TYPE_CODEC_UTIL, G_PARAM_STATIC_STRINGS | G_PARAM_READABLE));
}

static void
dino_plugins_rtp_module_instance_init (DinoPluginsRtpModule * self,
                                       gpointer klass)
{
	GeeHashSet* _tmp0_;
	GeeHashSet* _tmp1_;
	self->priv = dino_plugins_rtp_module_get_instance_private (self);
	_tmp0_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, NULL, NULL, NULL, NULL, NULL, NULL);
	self->priv->supported_codecs = (GeeSet*) _tmp0_;
	_tmp1_ = gee_hash_set_new (G_TYPE_STRING, (GBoxedCopyFunc) g_strdup, (GDestroyNotify) g_free, NULL, NULL, NULL, NULL, NULL, NULL);
	self->priv->unsupported_codecs = (GeeSet*) _tmp1_;
}

static void
dino_plugins_rtp_module_finalize (GObject * obj)
{
	DinoPluginsRtpModule * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (obj, DINO_PLUGINS_RTP_TYPE_MODULE, DinoPluginsRtpModule);
	_g_object_unref0 (self->priv->supported_codecs);
	_g_object_unref0 (self->priv->unsupported_codecs);
	_g_object_unref0 (self->priv->_plugin);
	G_OBJECT_CLASS (dino_plugins_rtp_module_parent_class)->finalize (obj);
}

static GType
dino_plugins_rtp_module_get_type_once (void)
{
	static const GTypeInfo g_define_type_info = { sizeof (DinoPluginsRtpModuleClass), (GBaseInitFunc) NULL, (GBaseFinalizeFunc) NULL, (GClassInitFunc) dino_plugins_rtp_module_class_init, (GClassFinalizeFunc) NULL, NULL, sizeof (DinoPluginsRtpModule), 0, (GInstanceInitFunc) dino_plugins_rtp_module_instance_init, NULL };
	GType dino_plugins_rtp_module_type_id;
	dino_plugins_rtp_module_type_id = g_type_register_static (XMPP_XEP_JINGLE_RTP_TYPE_MODULE, "DinoPluginsRtpModule", &g_define_type_info, 0);
	DinoPluginsRtpModule_private_offset = g_type_add_instance_private (dino_plugins_rtp_module_type_id, sizeof (DinoPluginsRtpModulePrivate));
	return dino_plugins_rtp_module_type_id;
}

GType
dino_plugins_rtp_module_get_type (void)
{
	static volatile gsize dino_plugins_rtp_module_type_id__once = 0;
	if (g_once_init_enter (&dino_plugins_rtp_module_type_id__once)) {
		GType dino_plugins_rtp_module_type_id;
		dino_plugins_rtp_module_type_id = dino_plugins_rtp_module_get_type_once ();
		g_once_init_leave (&dino_plugins_rtp_module_type_id__once, dino_plugins_rtp_module_type_id);
	}
	return dino_plugins_rtp_module_type_id__once;
}

static void
_vala_dino_plugins_rtp_module_get_property (GObject * object,
                                            guint property_id,
                                            GValue * value,
                                            GParamSpec * pspec)
{
	DinoPluginsRtpModule * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, DINO_PLUGINS_RTP_TYPE_MODULE, DinoPluginsRtpModule);
	switch (property_id) {
		case DINO_PLUGINS_RTP_MODULE_PLUGIN_PROPERTY:
		g_value_set_object (value, dino_plugins_rtp_module_get_plugin (self));
		break;
		case DINO_PLUGINS_RTP_MODULE_CODEC_UTIL_PROPERTY:
		dino_plugins_rtp_value_set_codec_util (value, dino_plugins_rtp_module_get_codec_util (self));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

static void
_vala_dino_plugins_rtp_module_set_property (GObject * object,
                                            guint property_id,
                                            const GValue * value,
                                            GParamSpec * pspec)
{
	DinoPluginsRtpModule * self;
	self = G_TYPE_CHECK_INSTANCE_CAST (object, DINO_PLUGINS_RTP_TYPE_MODULE, DinoPluginsRtpModule);
	switch (property_id) {
		case DINO_PLUGINS_RTP_MODULE_PLUGIN_PROPERTY:
		dino_plugins_rtp_module_set_plugin (self, g_value_get_object (value));
		break;
		default:
		G_OBJECT_WARN_INVALID_PROPERTY_ID (object, property_id, pspec);
		break;
	}
}

