mirror of
https://gitlab.gnome.org/GNOME/calls.git
synced 2025-01-07 04:15:32 +00:00
sip: media-pipeline: Don't implement GInitable
We don't expect the initialization to be able to fail. The only thing that could potentially fail is setting up codecs and this has been delayed until after initialization.
This commit is contained in:
parent
fe6951c938
commit
c4aa8d45e8
1 changed files with 35 additions and 47 deletions
|
@ -159,12 +159,12 @@ struct _CallsSipMediaPipeline {
|
|||
guint bus_watch_recv;
|
||||
};
|
||||
|
||||
#if GLIB_CHECK_VERSION(2, 70, 0)
|
||||
G_DEFINE_FINAL_TYPE (CallsSipMediaPipeline, calls_sip_media_pipeline, G_TYPE_OBJECT)
|
||||
#else
|
||||
G_DEFINE_TYPE (CallsSipMediaPipeline, calls_sip_media_pipeline, G_TYPE_OBJECT)
|
||||
#endif
|
||||
|
||||
static void initable_iface_init (GInitableIface *iface);
|
||||
|
||||
|
||||
G_DEFINE_TYPE_WITH_CODE (CallsSipMediaPipeline, calls_sip_media_pipeline, G_TYPE_OBJECT,
|
||||
G_IMPLEMENT_INTERFACE (G_TYPE_INITABLE, initable_iface_init));
|
||||
|
||||
|
||||
static void
|
||||
|
@ -459,7 +459,6 @@ send_pipeline_setup_codecs (CallsSipMediaPipeline *self,
|
|||
*/
|
||||
static gboolean
|
||||
send_pipeline_init (CallsSipMediaPipeline *self,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
const char *env_var;
|
||||
|
@ -648,7 +647,6 @@ recv_pipeline_setup_codecs (CallsSipMediaPipeline *self,
|
|||
*/
|
||||
static gboolean
|
||||
recv_pipeline_init (CallsSipMediaPipeline *self,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
const char *env_var;
|
||||
|
@ -818,6 +816,32 @@ calls_sip_media_pipeline_set_property (GObject *object,
|
|||
}
|
||||
|
||||
|
||||
static void
|
||||
calls_sip_media_pipeline_constructed (GObject *object)
|
||||
{
|
||||
g_autoptr (GError) error = NULL;
|
||||
CallsSipMediaPipeline *self = CALLS_SIP_MEDIA_PIPELINE (object);
|
||||
|
||||
G_OBJECT_CLASS (calls_sip_media_pipeline_parent_class)->constructed (object);
|
||||
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_INITIALIZING);
|
||||
|
||||
if (!recv_pipeline_init (self, &error)) {
|
||||
g_warning ("Could not create receive pipeline: %s", error->message);
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
if (!send_pipeline_init (self, &error)) {
|
||||
g_warning ("Could not create send pipeline: %s", error->message);
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_ERROR);
|
||||
return;
|
||||
}
|
||||
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_NEED_CODEC);
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
calls_sip_media_pipeline_finalize (GObject *object)
|
||||
{
|
||||
|
@ -844,6 +868,7 @@ calls_sip_media_pipeline_class_init (CallsSipMediaPipelineClass *klass)
|
|||
GObjectClass *object_class = G_OBJECT_CLASS (klass);
|
||||
|
||||
object_class->set_property = calls_sip_media_pipeline_set_property;
|
||||
object_class->constructed = calls_sip_media_pipeline_constructed;
|
||||
object_class->get_property = calls_sip_media_pipeline_get_property;
|
||||
object_class->finalize = calls_sip_media_pipeline_finalize;
|
||||
|
||||
|
@ -915,52 +940,15 @@ calls_sip_media_pipeline_init (CallsSipMediaPipeline *self)
|
|||
}
|
||||
|
||||
|
||||
static gboolean
|
||||
pipelines_initable_init (GInitable *initable,
|
||||
GCancellable *cancellable,
|
||||
GError **error)
|
||||
{
|
||||
CallsSipMediaPipeline *self = CALLS_SIP_MEDIA_PIPELINE (initable);
|
||||
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_INITIALIZING);
|
||||
|
||||
if (!recv_pipeline_init (self, cancellable, error))
|
||||
goto err;
|
||||
|
||||
if (!send_pipeline_init (self, cancellable, error))
|
||||
goto err;
|
||||
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_NEED_CODEC);
|
||||
return TRUE;
|
||||
|
||||
err:
|
||||
set_state (self, CALLS_MEDIA_PIPELINE_STATE_ERROR);
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
|
||||
static void
|
||||
initable_iface_init (GInitableIface *iface)
|
||||
{
|
||||
iface->init = pipelines_initable_init;
|
||||
}
|
||||
|
||||
|
||||
CallsSipMediaPipeline*
|
||||
calls_sip_media_pipeline_new (MediaCodecInfo *codec)
|
||||
{
|
||||
CallsSipMediaPipeline *pipeline;
|
||||
g_autoptr (GError) error = NULL;
|
||||
|
||||
pipeline = g_initable_new (CALLS_TYPE_SIP_MEDIA_PIPELINE, NULL, &error,
|
||||
NULL);
|
||||
pipeline = g_object_new (CALLS_TYPE_SIP_MEDIA_PIPELINE, NULL);
|
||||
|
||||
if (pipeline) {
|
||||
if (codec)
|
||||
g_object_set (pipeline, "codec", codec, NULL);
|
||||
} else {
|
||||
g_warning ("Media pipeline could not be initialized: %s", error->message);
|
||||
}
|
||||
if (codec)
|
||||
g_object_set (pipeline, "codec", codec, NULL);
|
||||
|
||||
return pipeline;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue