static void
gst_eglglessink_init (GstEglGlesSink * eglglessink,
    GstEglGlesSinkClass * gclass)
{
  /* Init defaults */

  /** Flags */
  eglglessink->have_window = FALSE;
  eglglessink->egl_started = FALSE;
  eglglessink->using_own_window = FALSE;

  /** Props */
  eglglessink->create_window = TRUE;
  eglglessink->force_aspect_ratio = TRUE;

  eglglessink->render_region.x = 0;
  eglglessink->render_region.y = 0;
  eglglessink->render_region.w = -1;
  eglglessink->render_region.h = -1;
  eglglessink->render_region_changed = TRUE;
  eglglessink->render_region_user = FALSE;

  eglglessink->par_n = 1;
  eglglessink->par_d = 1;

  eglglessink->render_lock = g_mutex_new ();
  eglglessink->render_cond = g_cond_new ();
  eglglessink->queue = gst_data_queue_new (queue_check_full_func, NULL);
  eglglessink->last_flow = GST_FLOW_WRONG_STATE;

  eglglessink->egl_context =
      gst_egl_adaptation_new (GST_ELEMENT_CAST (eglglessink));
}
static void gst_scream_queue_init(GstScreamQueue *self)
{
    self->sink_pad = gst_pad_new_from_static_template(&sink_template, "sink");
    gst_pad_set_chain_function(self->sink_pad, GST_DEBUG_FUNCPTR(gst_scream_queue_sink_chain));
    gst_pad_set_event_function(self->sink_pad, GST_DEBUG_FUNCPTR(gst_scream_queue_sink_event));
    GST_PAD_SET_PROXY_CAPS(self->sink_pad);
    gst_element_add_pad(GST_ELEMENT(self), self->sink_pad);

    self->src_pad = gst_pad_new_from_static_template(&src_template, "src");
    gst_pad_set_event_function(self->src_pad, GST_DEBUG_FUNCPTR(gst_scream_queue_src_event));
    GST_PAD_SET_PROXY_CAPS(self->src_pad);
    gst_element_add_pad(GST_ELEMENT(self), self->src_pad);

    g_rw_lock_init(&self->lock);
    self->streams = g_hash_table_new_full(NULL, NULL, NULL, (GDestroyNotify) destroy_stream);
    self->adapted_stream_ids = g_hash_table_new(NULL, NULL);
    self->ignored_stream_ids = g_hash_table_new(NULL, NULL);

    self->scream_controller_id = DEFAULT_GST_SCREAM_CONTROLLER_ID;
    self->scream_controller = NULL;
    self->approved_packets = gst_data_queue_new(
        (GstDataQueueCheckFullFunction)fake_queue_check_full_cb,
        NULL, NULL, self);

    self->incoming_packets = g_async_queue_new();

    self->priority = DEFAULT_PRIORITY;
    self->pass_through = DEFAULT_PASS_THROUGH;
    self->next_approve_time = 0;
}
static void
gst_splitmux_part_pad_init (GstSplitMuxPartPad * pad)
{
  pad->queue = gst_data_queue_new (splitmux_data_queue_is_full_cb,
      NULL, NULL, pad);
  gst_segment_init (&pad->segment, GST_FORMAT_UNDEFINED);
  gst_segment_init (&pad->orig_segment, GST_FORMAT_UNDEFINED);
}
static void gst_sctp_enc_init(GstSctpEnc *self)
{
    self->sctp_association_id = DEFAULT_GST_SCTP_ASSOCIATION_ID;
    self->remote_sctp_port = DEFAULT_REMOTE_SCTP_PORT;

    self->sctp_association = NULL;
    self->outbound_sctp_packet_queue = gst_data_queue_new(data_queue_check_full_cb,
                                       data_queue_full_cb, data_queue_empty_cb, NULL);

    self->src_pad = gst_pad_new_from_static_template(&src_template, "src");
    gst_pad_set_event_function(self->src_pad,
                               GST_DEBUG_FUNCPTR((GstPadEventFunction)gst_sctp_enc_src_event));
    gst_pad_set_activatemode_function (self->src_pad,
                                       GST_DEBUG_FUNCPTR (gst_sctp_enc_src_activate_mode));

    gst_element_add_pad(GST_ELEMENT(self), self->src_pad);

    g_queue_init(&self->pending_pads);
}
static void gst_sctp_dec_pad_init(GstSctpDecPad *self)
{
    self->packet_queue = gst_data_queue_new(data_queue_check_full_cb,
        data_queue_full_cb, data_queue_empty_cb, NULL);
}