Home | History | Annotate | Download | only in audio

Lines Matching full:self

74 static gboolean gst_a2dp_sink_init_caps_filter(GstA2dpSink *self);
75 static gboolean gst_a2dp_sink_init_fakesink(GstA2dpSink *self);
76 static gboolean gst_a2dp_sink_remove_fakesink(GstA2dpSink *self);
80 GstA2dpSink *self = GST_A2DP_SINK(obj);
82 g_mutex_free(self->cb_mutex);
87 static GstState gst_a2dp_sink_get_state(GstA2dpSink *self)
91 gst_element_get_state(GST_ELEMENT(self), &current, &pending, 0);
102 static GstElement *gst_a2dp_sink_init_element(GstA2dpSink *self,
109 GST_LOG_OBJECT(self, "Initializing %s", elementname);
113 GST_DEBUG_OBJECT(self, "Couldn't create %s", elementname);
117 if (!gst_bin_add(GST_BIN(self), element)) {
118 GST_DEBUG_OBJECT(self, "failed to add %s to the bin",
123 state = gst_a2dp_sink_get_state(self);
126 GST_DEBUG_OBJECT(self, "%s failed to go to playing",
133 GST_DEBUG_OBJECT(self, "couldn't link %s",
142 gst_bin_remove(GST_BIN(self), element);
165 GstA2dpSink *self = GST_A2DP_SINK(object);
169 if (self->sink != NULL)
170 gst_avdtp_sink_set_device(self->sink,
173 if (self->device != NULL)
174 g_free(self->device);
175 self->device = g_value_dup_string(value);
179 self->autoconnect = g_value_get_boolean(value);
181 if (self->sink != NULL)
182 g_object_set(G_OBJECT(self->sink), "auto-connect",
183 self->autoconnect, NULL);
195 GstA2dpSink *self = GST_A2DP_SINK(object);
200 if (self->sink != NULL) {
201 device = gst_avdtp_sink_get_device(self->sink);
207 if (self->sink != NULL)
208 g_object_get(G_OBJECT(self->sink), "auto-connect",
209 &self->autoconnect, NULL);
211 g_value_set_boolean(value, self->autoconnect);
219 static gboolean gst_a2dp_sink_init_ghost_pad(GstA2dpSink *self)
224 capsfilter_pad = gst_element_get_static_pad(self->capsfilter, "sink");
227 self->ghostpad = GST_GHOST_PAD(gst_ghost_pad_new("sink",
232 gst_pad_set_getcaps_function(GST_PAD(self->ghostpad),
234 self->ghostpad_setcapsfunc = GST_PAD_SETCAPSFUNC(self->ghostpad);
235 gst_pad_set_setcaps_function(GST_PAD(self->ghostpad),
240 self->ghostpad_eventfunc = GST_PAD_EVENTFUNC(GST_PAD(self->ghostpad));
241 gst_pad_set_event_function(GST_PAD(self->ghostpad),
244 if (!gst_element_add_pad(GST_ELEMENT(self), GST_PAD(self->ghostpad)))
245 GST_ERROR_OBJECT(self, "failed to add ghostpad");
250 static void gst_a2dp_sink_remove_dynamic_elements(GstA2dpSink *self)
252 if (self->rtp) {
253 GST_LOG_OBJECT(self, "removing rtp element from the bin");
254 if (!gst_bin_remove(GST_BIN(self), GST_ELEMENT(self->rtp)))
255 GST_WARNING_OBJECT(self, "failed to remove rtp "
258 self->rtp = NULL;
266 GstA2dpSink *self = GST_A2DP_SINK(element);
270 self->taglist = gst_tag_list_new();
272 gst_a2dp_sink_init_fakesink(self);
276 self->sink_is_in_bin = FALSE;
277 self->sink = GST_AVDTP_SINK(gst_element_factory_make(
279 if (self->sink == NULL) {
280 GST_WARNING_OBJECT(self, "failed to create avdtpsink");
284 if (self->device != NULL)
285 gst_avdtp_sink_set_device(self->sink,
286 self->device);
288 g_object_set(G_OBJECT(self->sink), "auto-connect",
289 self->autoconnect, NULL);
291 ret = gst_element_set_state(GST_ELEMENT(self->sink),
306 if (self->taglist) {
307 gst_tag_list_free(self->taglist);
308 self->taglist = NULL;
310 if (self->newseg_event != NULL) {
311 gst_event_unref(self->newseg_event);
312 self->newseg_event = NULL;
314 gst_a2dp_sink_remove_fakesink(self);
318 if (self->sink_is_in_bin) {
319 if (!gst_bin_remove(GST_BIN(self),
320 GST_ELEMENT(self->sink)))
321 GST_WARNING_OBJECT(self, "Failed to remove "
323 } else if (self->sink != NULL) {
324 gst_element_set_state(GST_ELEMENT(self->sink),
326 g_object_unref(G_OBJECT(self->sink));
329 self->sink = NULL;
331 gst_a2dp_sink_remove_dynamic_elements(self);
372 GstCaps *gst_a2dp_sink_get_device_caps(GstA2dpSink *self)
374 return gst_avdtp_sink_get_device_caps(self->sink);
381 GstA2dpSink *self = GST_A2DP_SINK(GST_PAD_PARENT(pad));
383 if (self->sink == NULL) {
384 GST_DEBUG_OBJECT(self, "a2dpsink isn't initialized "
389 GST_LOG_OBJECT(self, "Getting device caps");
390 caps = gst_a2dp_sink_get_device_caps(self);
396 g_object_set(self->capsfilter, "caps", caps_aux, NULL);
401 static gboolean gst_a2dp_sink_init_avdtp_sink(GstA2dpSink *self)
406 if (self->sink_is_in_bin)
409 if (self->sink == NULL)
412 sink = GST_ELEMENT(self->sink);
415 GST_ERROR_OBJECT(self, "Couldn't create avdtpsink");
419 if (!gst_bin_add(GST_BIN(self), sink)) {
420 GST_ERROR_OBJECT(self, "failed to add avdtpsink "
427 GST_ERROR_OBJECT(self, "avdtpsink failed to go to ready");
431 if (!gst_element_link(GST_ELEMENT(self->rtp), sink)) {
432 GST_ERROR_OBJECT(self, "couldn't link rtpsbcpay "
437 self->sink = GST_AVDTP_SINK(sink);
438 self->sink_is_in_bin = TRUE;
439 g_object_set(G_OBJECT(self->sink), "device", self->device, NULL);
447 gst_bin_remove(GST_BIN(self), sink);
457 static gboolean gst_a2dp_sink_init_rtp_sbc_element(GstA2dpSink *self)
462 if (self->rtp != NULL)
465 rtppay = gst_a2dp_sink_init_element(self, "rtpsbcpay", "rtp",
466 self->capsfilter);
470 self->rtp = GST_BASE_RTP_PAYLOAD(rtppay);
471 g_object_set(G_OBJECT(self->rtp), "min-frames", -1, NULL);
478 static gboolean gst_a2dp_sink_init_rtp_mpeg_element(GstA2dpSink *self)
483 if (self->rtp)
486 GST_LOG_OBJECT(self, "Initializing rtp mpeg element");
488 if (self->capsfilter == NULL)
491 rtppay = gst_a2dp_sink_init_element(self, "rtpmpapay", "rtp",
492 self->capsfilter);
496 self->rtp = GST_BASE_RTP_PAYLOAD(rtppay);
503 static gboolean gst_a2dp_sink_init_dynamic_elements(GstA2dpSink *self,
515 gst_a2dp_sink_remove_fakesink(self);
519 GST_LOG_OBJECT(self, "sbc media received");
520 if (!gst_a2dp_sink_init_rtp_sbc_element(self))
523 GST_LOG_OBJECT(self, "mp3 media received");
524 if (!gst_a2dp_sink_init_rtp_mpeg_element(self))
527 GST_ERROR_OBJECT(self, "Unexpected media type");
531 if (!gst_a2dp_sink_init_avdtp_sink(self))
536 if (self->taglist != NULL &&
539 event = gst_event_new_tag(self->taglist);
542 if (gst_tag_list_get_boolean(self->taglist, "has-crc", &crc))
543 gst_avdtp_sink_set_crc(self->sink, crc);
545 if (gst_tag_list_get_string(self->taglist, "channel-mode",
547 gst_avdtp_sink_set_channel_mode(self->sink, mode);
549 capsfilterpad = gst_ghost_pad_get_target(self->ghostpad);
551 self->taglist = NULL;
555 if (!gst_avdtp_sink_set_device_caps(self->sink, caps))
558 g_object_set(G_OBJECT(self->rtp), "mtu",
559 gst_avdtp_sink_get_link_mtu(self->sink), NULL);
562 if (self->newseg_event) {
563 gst_pad_send_event(GST_BASE_RTP_PAYLOAD_SINKPAD(self->rtp),
564 self->newseg_event);
565 self->newseg_event = NULL;
573 GstA2dpSink *self;
575 self = GST_A2DP_SINK(GST_PAD_PARENT(pad));
576 GST_INFO_OBJECT(self, "setting caps");
579 gst_a2dp_sink_init_dynamic_elements(self, caps);
581 return self->ghostpad_setcapsfunc(GST_PAD(self->ghostpad), caps);
588 GstA2dpSink *self;
592 self = GST_A2DP_SINK(GST_PAD_PARENT(pad));
593 parent = gst_element_get_parent(GST_ELEMENT(self->sink));
596 parent != GST_OBJECT_CAST(self)) {
597 if (self->newseg_event != NULL)
598 gst_event_unref(self->newseg_event);
599 self->newseg_event = gst_event_ref(event);
602 parent != GST_OBJECT_CAST(self)) {
603 if (self->taglist == NULL)
604 gst_event_parse_tag(event, &self->taglist);
607 gst_tag_list_insert(self->taglist, taglist,
615 return self->ghostpad_eventfunc(GST_PAD(self->ghostpad), event);
618 static gboolean gst_a2dp_sink_init_caps_filter(GstA2dpSink *self)
626 if (!gst_bin_add(GST_BIN(self), element))
629 self->capsfilter = element;
633 GST_ERROR_OBJECT(self, "Failed to initialize caps filter");
637 static gboolean gst_a2dp_sink_init_fakesink(GstA2dpSink *self)
639 if (self->fakesink != NULL)
642 g_mutex_lock(self->cb_mutex);
643 self->fakesink = gst_a2dp_sink_init_element(self, "fakesink",
644 "fakesink", self->capsfilter);
645 g_mutex_unlock(self->cb_mutex);
647 if (!self->fakesink)
653 static gboolean gst_a2dp_sink_remove_fakesink(GstA2dpSink *self)
655 g_mutex_lock(self->cb_mutex);
657 if (self->fakesink != NULL) {
658 gst_element_set_locked_state(self->fakesink, TRUE);
659 gst_element_set_state(self->fakesink, GST_STATE_NULL);
661 gst_bin_remove(GST_BIN(self), self->fakesink);
662 self->fakesink = NULL;
665 g_mutex_unlock(self->cb_mutex);
670 static void gst_a2dp_sink_init(GstA2dpSink *self,
673 self->sink = NULL;
674 self->fakesink = NULL;
675 self->rtp = NULL;
676 self->device = NULL;
677 self->autoconnect = DEFAULT_AUTOCONNECT;
678 self->capsfilter = NULL;
679 self->newseg_event = NULL;
680 self->taglist = NULL;
681 self->ghostpad = NULL;
682 self->sink_is_in_bin = FALSE;
684 self->cb_mutex = g_mutex_new();
687 gst_a2dp_sink_init_caps_filter(self);
688 g_object_set(self->capsfilter, "caps",
692 gst_a2dp_sink_init_fakesink(self);
694 gst_a2dp_sink_init_ghost_pad(self);