static GstBin * kms_agnostic_bin2_create_bin_for_caps (KmsAgnosticBin2 * self, GstCaps * caps) { GstBin *dec_bin; KmsEncTreeBin *enc_bin; GstElement *input_element, *output_tee; dec_bin = kms_agnostic_bin2_get_or_create_dec_bin (self, caps); if (dec_bin == NULL) { return NULL; } if (is_raw_caps (caps)) { return dec_bin; } enc_bin = kms_enc_tree_bin_new (caps, self->priv->default_bitrate); if (enc_bin == NULL) { return NULL; } gst_bin_add (GST_BIN (self), GST_ELEMENT (enc_bin)); gst_element_sync_state_with_parent (GST_ELEMENT (enc_bin)); output_tee = kms_tree_bin_get_output_tee (KMS_TREE_BIN (dec_bin)); input_element = kms_tree_bin_get_input_element (KMS_TREE_BIN (enc_bin)); link_element_to_tee (output_tee, input_element); kms_agnostic_bin2_insert_bin (self, GST_BIN (enc_bin)); return GST_BIN (enc_bin); }
static GstBin * kms_agnostic_bin2_create_bin_for_caps (KmsAgnosticBin2 * self, GstCaps * caps) { GstBin *dec_bin; KmsEncTreeBin *enc_bin; GstElement *input_element, *output_tee; if (kms_utils_caps_are_rtp (caps)) { return kms_agnostic_bin2_create_rtp_pay_bin (self, caps); } dec_bin = kms_agnostic_bin2_get_or_create_dec_bin (self, caps); if (dec_bin == NULL) { return NULL; } if (kms_utils_caps_are_raw (caps)) { return dec_bin; } enc_bin = kms_enc_tree_bin_new (caps, TARGET_BITRATE_DEFAULT, self->priv->min_bitrate, self->priv->max_bitrate, self->priv->codec_config); if (enc_bin == NULL) { return NULL; } gst_bin_add (GST_BIN (self), GST_ELEMENT (enc_bin)); gst_element_sync_state_with_parent (GST_ELEMENT (enc_bin)); output_tee = kms_tree_bin_get_output_tee (KMS_TREE_BIN (dec_bin)); input_element = kms_tree_bin_get_input_element (KMS_TREE_BIN (enc_bin)); gst_element_link (output_tee, input_element); kms_agnostic_bin2_insert_bin (self, GST_BIN (enc_bin)); return GST_BIN (enc_bin); }