static gboolean gst_a2dp_sink_init_dynamic_elements (GstA2dpSink * self, GstCaps * caps) { GstStructure *structure; GstEvent *event; gboolean crc; gchar *mode = NULL; structure = gst_caps_get_structure (caps, 0); /* first, we need to create our rtp payloader */ if (gst_structure_has_name (structure, "audio/x-sbc")) { GST_LOG_OBJECT (self, "sbc media received"); if (!gst_a2dp_sink_init_rtp_sbc_element (self)) return FALSE; } else if (gst_structure_has_name (structure, "audio/mpeg")) { GST_LOG_OBJECT (self, "mp3 media received"); if (!gst_a2dp_sink_init_rtp_mpeg_element (self)) return FALSE; } else { GST_ERROR_OBJECT (self, "Unexpected media type"); return FALSE; } if (!gst_element_link (GST_ELEMENT (self->rtp), GST_ELEMENT (self->sink))) { GST_ERROR_OBJECT (self, "couldn't link rtpsbcpay " "to avdtpsink"); return FALSE; } /* check if we should push the taglist FIXME should we push this? * we can send the tags directly if needed */ if (self->taglist != NULL && gst_structure_has_name (structure, "audio/mpeg")) { event = gst_event_new_tag (self->taglist); /* send directly the crc */ if (gst_tag_list_get_boolean (self->taglist, "has-crc", &crc)) gst_avdtp_sink_set_crc (self->sink, crc); if (gst_tag_list_get_string (self->taglist, "channel-mode", &mode)) gst_avdtp_sink_set_channel_mode (self->sink, mode); gst_pad_send_event (self->ghostpad, event); self->taglist = NULL; g_free (mode); } g_object_set (self->rtp, "mtu", gst_avdtp_sink_get_link_mtu (self->sink), NULL); return TRUE; }
static gboolean gst_a2dp_sink_init_dynamic_elements(GstA2dpSink *self, GstCaps *caps) { GstStructure *structure; GstEvent *event; GstPad *capsfilterpad; gboolean crc; gchar *mode = NULL; structure = gst_caps_get_structure(caps, 0); /* before everything we need to remove fakesink */ gst_a2dp_sink_remove_fakesink(self); /* first, we need to create our rtp payloader */ if (gst_structure_has_name(structure, "audio/x-sbc")) { GST_LOG_OBJECT(self, "sbc media received"); if (!gst_a2dp_sink_init_rtp_sbc_element(self)) return FALSE; } else if (gst_structure_has_name(structure, "audio/mpeg")) { GST_LOG_OBJECT(self, "mp3 media received"); if (!gst_a2dp_sink_init_rtp_mpeg_element(self)) return FALSE; } else { GST_ERROR_OBJECT(self, "Unexpected media type"); return FALSE; } if (!gst_a2dp_sink_init_avdtp_sink(self)) return FALSE; /* check if we should push the taglist FIXME should we push this? * we can send the tags directly if needed */ if (self->taglist != NULL && gst_structure_has_name(structure, "audio/mpeg")) { event = gst_event_new_tag(self->taglist); /* send directly the crc */ if (gst_tag_list_get_boolean(self->taglist, "has-crc", &crc)) gst_avdtp_sink_set_crc(self->sink, crc); if (gst_tag_list_get_string(self->taglist, "channel-mode", &mode)) gst_avdtp_sink_set_channel_mode(self->sink, mode); capsfilterpad = gst_ghost_pad_get_target(self->ghostpad); gst_pad_send_event(capsfilterpad, event); self->taglist = NULL; g_free(mode); } if (!gst_avdtp_sink_set_device_caps(self->sink, caps)) return FALSE; g_object_set(G_OBJECT(self->rtp), "mtu", gst_avdtp_sink_get_link_mtu(self->sink), NULL); /* we forward our new segment here if we have one */ if (self->newseg_event) { gst_pad_send_event(GST_BASE_RTP_PAYLOAD_SINKPAD(self->rtp), self->newseg_event); self->newseg_event = NULL; } return TRUE; }