Lines Matching refs:adder

203 static gboolean gst_adder_setcaps (GstAdder * adder, GstPad * pad,
233 GstAdder *adder; in gst_adder_sink_getcaps() local
238 adder = GST_ADDER (GST_PAD_PARENT (pad)); in gst_adder_sink_getcaps()
240 GST_OBJECT_LOCK (adder); in gst_adder_sink_getcaps()
242 if ((filter_caps = adder->filter_caps)) { in gst_adder_sink_getcaps()
252 GST_OBJECT_UNLOCK (adder); in gst_adder_sink_getcaps()
260 peercaps = gst_pad_peer_query_caps (adder->srcpad, filter_caps); in gst_adder_sink_getcaps()
263 GST_OBJECT_LOCK (adder); in gst_adder_sink_getcaps()
265 adder->current_caps ? gst_caps_ref (adder->current_caps) : NULL; in gst_adder_sink_getcaps()
271 GST_OBJECT_UNLOCK (adder); in gst_adder_sink_getcaps()
275 GST_DEBUG_OBJECT (adder, "intersecting peer and our caps"); in gst_adder_sink_getcaps()
286 GST_DEBUG_OBJECT (adder, "no peer caps, using filtered caps"); in gst_adder_sink_getcaps()
292 GST_DEBUG_OBJECT (adder, "no peer caps, using our caps"); in gst_adder_sink_getcaps()
316 GST_LOG_OBJECT (adder, "getting caps on pad %p,%s to %" GST_PTR_FORMAT, pad, in gst_adder_sink_getcaps()
352 gst_adder_setcaps (GstAdder * adder, GstPad * pad, GstCaps * orig_caps) in gst_adder_setcaps() argument
369 GST_OBJECT_LOCK (adder); in gst_adder_setcaps()
374 if (adder->current_caps != NULL) { in gst_adder_setcaps()
375 if (gst_audio_info_is_equal (&info, &adder->info)) { in gst_adder_setcaps()
376 GST_OBJECT_UNLOCK (adder); in gst_adder_setcaps()
381 "current caps are %" GST_PTR_FORMAT, caps, adder->current_caps); in gst_adder_setcaps()
382 GST_OBJECT_UNLOCK (adder); in gst_adder_setcaps()
390 adder->current_caps = gst_caps_ref (caps); in gst_adder_setcaps()
392 memcpy (&adder->info, &info, sizeof (info)); in gst_adder_setcaps()
393 GST_OBJECT_UNLOCK (adder); in gst_adder_setcaps()
406 GST_WARNING_OBJECT (adder, "invalid format set as caps"); in gst_adder_setcaps()
428 gst_adder_query_duration (GstAdder * adder, GstQuery * query) in gst_adder_query_duration() argument
444 it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); in gst_adder_query_duration()
490 GST_DEBUG_OBJECT (adder, "Total duration in format %s: %" in gst_adder_query_duration()
501 GstAdder *adder = GST_ADDER (parent); in gst_adder_src_query() local
514 gst_query_set_position (query, format, adder->segment.position); in gst_adder_src_query()
518 gst_query_set_position (query, format, adder->offset); in gst_adder_src_query()
527 res = gst_adder_query_duration (adder, query); in gst_adder_src_query()
587 forward_event (GstAdder * adder, GstEvent * event, gboolean flush) in forward_event() argument
595 GST_LOG_OBJECT (adder, "Forwarding event %p (%s)", event, in forward_event()
603 it = gst_element_iterate_sink_pads (GST_ELEMENT_CAST (adder)); in forward_event()
625 GST_LOG_OBJECT (adder, "Forwarded event %p (%s), ret=%d", event, in forward_event()
635 GstAdder *adder; in gst_adder_src_event() local
638 adder = GST_ADDER (parent); in gst_adder_src_event()
660 GST_DEBUG_OBJECT (adder, in gst_adder_src_event()
666 GST_DEBUG_OBJECT (adder, in gst_adder_src_event()
671 dest_format = adder->segment.format; in gst_adder_src_event()
674 GST_DEBUG_OBJECT (adder, in gst_adder_src_event()
689 gst_pad_push_event (adder->srcpad, gst_event_new_flush_start ()); in gst_adder_src_event()
690 gst_collect_pads_set_flushing (adder->collect, TRUE); in gst_adder_src_event()
698 GST_COLLECT_PADS_STREAM_LOCK (adder->collect); in gst_adder_src_event()
699 adder->flush_stop_pending = TRUE; in gst_adder_src_event()
700 GST_COLLECT_PADS_STREAM_UNLOCK (adder->collect); in gst_adder_src_event()
701 GST_DEBUG_OBJECT (adder, "mark pending flush stop event"); in gst_adder_src_event()
703 GST_DEBUG_OBJECT (adder, "handling seek event: %" GST_PTR_FORMAT, event); in gst_adder_src_event()
708 GST_COLLECT_PADS_STREAM_LOCK (adder->collect); in gst_adder_src_event()
711 if (adder->segment.stop != -1) { in gst_adder_src_event()
712 adder->segment.position = adder->segment.stop; in gst_adder_src_event()
714 gst_segment_do_seek (&adder->segment, rate, seek_format, flags, in gst_adder_src_event()
720 gst_collect_pads_set_flushing (adder->collect, TRUE); in gst_adder_src_event()
722 GST_COLLECT_PADS_STREAM_UNLOCK (adder->collect); in gst_adder_src_event()
723 GST_DEBUG_OBJECT (adder, "forwarding seek event: %" GST_PTR_FORMAT, in gst_adder_src_event()
725 GST_DEBUG_OBJECT (adder, "updated segment: %" GST_SEGMENT_FORMAT, in gst_adder_src_event()
726 &adder->segment); in gst_adder_src_event()
730 g_atomic_int_set (&adder->new_segment_pending, TRUE); in gst_adder_src_event()
731 result = forward_event (adder, event, flush); in gst_adder_src_event()
734 GST_DEBUG_OBJECT (adder, "seeking failed"); in gst_adder_src_event()
736 if (g_atomic_int_compare_and_exchange (&adder->flush_stop_pending, in gst_adder_src_event()
738 GST_DEBUG_OBJECT (adder, "pending flush stop"); in gst_adder_src_event()
739 if (!gst_pad_push_event (adder->srcpad, in gst_adder_src_event()
741 GST_WARNING_OBJECT (adder, "Sending flush stop event failed"); in gst_adder_src_event()
758 GST_DEBUG_OBJECT (adder, "forward unhandled event: %s", in gst_adder_src_event()
760 result = forward_event (adder, event, FALSE); in gst_adder_src_event()
773 GstAdder *adder = GST_ADDER (user_data); in gst_adder_sink_event() local
785 res = gst_adder_setcaps (adder, pad->pad, caps); in gst_adder_sink_event()
794 GST_COLLECT_PADS_STREAM_LOCK (adder->collect); in gst_adder_sink_event()
795 adder->flush_stop_pending = TRUE; in gst_adder_sink_event()
796 GST_COLLECT_PADS_STREAM_UNLOCK (adder->collect); in gst_adder_sink_event()
802 g_atomic_int_set (&adder->new_segment_pending, TRUE); in gst_adder_sink_event()
803 GST_COLLECT_PADS_STREAM_LOCK (adder->collect); in gst_adder_sink_event()
804 if (adder->flush_stop_pending) { in gst_adder_sink_event()
807 adder->flush_stop_pending = FALSE; in gst_adder_sink_event()
813 GST_COLLECT_PADS_STREAM_UNLOCK (adder->collect); in gst_adder_sink_event()
815 if (adder->pending_events) { in gst_adder_sink_event()
816 g_list_foreach (adder->pending_events, (GFunc) gst_event_unref, NULL); in gst_adder_sink_event()
817 g_list_free (adder->pending_events); in gst_adder_sink_event()
818 adder->pending_events = NULL; in gst_adder_sink_event()
823 adder->pending_events = g_list_append (adder->pending_events, event); in gst_adder_sink_event()
829 if (segment->rate != adder->segment.rate) { in gst_adder_sink_event()
832 segment->rate, adder->segment.rate); in gst_adder_sink_event()
882 gst_adder_init (GstAdder * adder) in gst_adder_init() argument
887 adder->srcpad = gst_pad_new_from_template (template, "src"); in gst_adder_init()
890 gst_pad_set_query_function (adder->srcpad, in gst_adder_init()
892 gst_pad_set_event_function (adder->srcpad, in gst_adder_init()
894 GST_PAD_SET_PROXY_CAPS (adder->srcpad); in gst_adder_init()
895 gst_element_add_pad (GST_ELEMENT (adder), adder->srcpad); in gst_adder_init()
897 adder->current_caps = NULL; in gst_adder_init()
898 gst_audio_info_init (&adder->info); in gst_adder_init()
899 adder->padcount = 0; in gst_adder_init()
901 adder->filter_caps = NULL; in gst_adder_init()
904 adder->collect = gst_collect_pads_new (); in gst_adder_init()
905 gst_collect_pads_set_function (adder->collect, in gst_adder_init()
906 GST_DEBUG_FUNCPTR (gst_adder_collected), adder); in gst_adder_init()
907 gst_collect_pads_set_clip_function (adder->collect, in gst_adder_init()
908 GST_DEBUG_FUNCPTR (gst_adder_do_clip), adder); in gst_adder_init()
909 gst_collect_pads_set_event_function (adder->collect, in gst_adder_init()
910 GST_DEBUG_FUNCPTR (gst_adder_sink_event), adder); in gst_adder_init()
911 gst_collect_pads_set_query_function (adder->collect, in gst_adder_init()
912 GST_DEBUG_FUNCPTR (gst_adder_sink_query), adder); in gst_adder_init()
918 GstAdder *adder = GST_ADDER (object); in gst_adder_dispose() local
920 if (adder->collect) { in gst_adder_dispose()
921 gst_object_unref (adder->collect); in gst_adder_dispose()
922 adder->collect = NULL; in gst_adder_dispose()
924 gst_caps_replace (&adder->filter_caps, NULL); in gst_adder_dispose()
925 gst_caps_replace (&adder->current_caps, NULL); in gst_adder_dispose()
927 if (adder->pending_events) { in gst_adder_dispose()
928 g_list_foreach (adder->pending_events, (GFunc) gst_event_unref, NULL); in gst_adder_dispose()
929 g_list_free (adder->pending_events); in gst_adder_dispose()
930 adder->pending_events = NULL; in gst_adder_dispose()
940 GstAdder *adder = GST_ADDER (object); in gst_adder_set_property() local
953 GST_OBJECT_LOCK (adder); in gst_adder_set_property()
954 old_caps = adder->filter_caps; in gst_adder_set_property()
955 adder->filter_caps = new_caps; in gst_adder_set_property()
956 GST_OBJECT_UNLOCK (adder); in gst_adder_set_property()
961 GST_DEBUG_OBJECT (adder, "set new caps %" GST_PTR_FORMAT, new_caps); in gst_adder_set_property()
974 GstAdder *adder = GST_ADDER (object); in gst_adder_get_property() local
978 GST_OBJECT_LOCK (adder); in gst_adder_get_property()
979 gst_value_set_caps (value, adder->filter_caps); in gst_adder_get_property()
980 GST_OBJECT_UNLOCK (adder); in gst_adder_get_property()
994 GstAdder *adder; in gst_adder_request_new_pad() local
1001 adder = GST_ADDER (element); in gst_adder_request_new_pad()
1004 padcount = g_atomic_int_add (&adder->padcount, 1); in gst_adder_request_new_pad()
1009 GST_DEBUG_OBJECT (adder, "request new pad %s", name); in gst_adder_request_new_pad()
1012 gst_collect_pads_add_pad (adder->collect, newpad, sizeof (GstCollectData), in gst_adder_request_new_pad()
1016 if (!gst_element_add_pad (GST_ELEMENT (adder), newpad)) in gst_adder_request_new_pad()
1019 gst_child_proxy_child_added (GST_CHILD_PROXY (adder), G_OBJECT (newpad), in gst_adder_request_new_pad()
1032 GST_DEBUG_OBJECT (adder, "could not add pad"); in gst_adder_request_new_pad()
1033 gst_collect_pads_remove_pad (adder->collect, newpad); in gst_adder_request_new_pad()
1042 GstAdder *adder; in gst_adder_release_pad() local
1044 adder = GST_ADDER (element); in gst_adder_release_pad()
1046 GST_DEBUG_OBJECT (adder, "release pad %s:%s", GST_DEBUG_PAD_NAME (pad)); in gst_adder_release_pad()
1048 gst_child_proxy_child_removed (GST_CHILD_PROXY (adder), G_OBJECT (pad), in gst_adder_release_pad()
1050 if (adder->collect) in gst_adder_release_pad()
1051 gst_collect_pads_remove_pad (adder->collect, pad); in gst_adder_release_pad()
1059 GstAdder *adder = GST_ADDER (user_data); in gst_adder_do_clip() local
1062 rate = GST_AUDIO_INFO_RATE (&adder->info); in gst_adder_do_clip()
1063 bpf = GST_AUDIO_INFO_BPF (&adder->info); in gst_adder_do_clip()
1093 GstAdder *adder; in gst_adder_collected() local
1106 adder = GST_ADDER (user_data); in gst_adder_collected()
1109 if (G_UNLIKELY (adder->info.finfo->format == GST_AUDIO_FORMAT_UNKNOWN)) in gst_adder_collected()
1112 if (adder->flush_stop_pending) { in gst_adder_collected()
1113 GST_INFO_OBJECT (adder->srcpad, "send pending flush stop event"); in gst_adder_collected()
1114 if (!gst_pad_push_event (adder->srcpad, gst_event_new_flush_stop (TRUE))) { in gst_adder_collected()
1115 GST_WARNING_OBJECT (adder->srcpad, "Sending flush stop event failed"); in gst_adder_collected()
1118 adder->flush_stop_pending = FALSE; in gst_adder_collected()
1121 if (adder->send_stream_start) { in gst_adder_collected()
1125 GST_INFO_OBJECT (adder->srcpad, "send pending stream start event"); in gst_adder_collected()
1133 if (!gst_pad_push_event (adder->srcpad, event)) { in gst_adder_collected()
1134 GST_WARNING_OBJECT (adder->srcpad, "Sending stream start event failed"); in gst_adder_collected()
1136 adder->send_stream_start = FALSE; in gst_adder_collected()
1139 if (adder->send_caps) { in gst_adder_collected()
1142 caps_event = gst_event_new_caps (adder->current_caps); in gst_adder_collected()
1143 GST_INFO_OBJECT (adder->srcpad, "send pending caps event %" GST_PTR_FORMAT, in gst_adder_collected()
1145 if (!gst_pad_push_event (adder->srcpad, caps_event)) { in gst_adder_collected()
1146 GST_WARNING_OBJECT (adder->srcpad, "Sending caps event failed"); in gst_adder_collected()
1148 adder->send_caps = FALSE; in gst_adder_collected()
1151 rate = GST_AUDIO_INFO_RATE (&adder->info); in gst_adder_collected()
1152 bps = GST_AUDIO_INFO_BPS (&adder->info); in gst_adder_collected()
1153 bpf = GST_AUDIO_INFO_BPF (&adder->info); in gst_adder_collected()
1155 if (g_atomic_int_compare_and_exchange (&adder->new_segment_pending, TRUE, in gst_adder_collected()
1164 event = gst_event_new_segment (&adder->segment); in gst_adder_collected()
1165 if (adder->segment.rate > 0.0) { in gst_adder_collected()
1166 adder->segment.position = adder->segment.start; in gst_adder_collected()
1168 adder->segment.position = adder->segment.stop; in gst_adder_collected()
1170 adder->offset = gst_util_uint64_scale (adder->segment.position, in gst_adder_collected()
1173 GST_INFO_OBJECT (adder->srcpad, "sending pending new segment event %" in gst_adder_collected()
1174 GST_SEGMENT_FORMAT, &adder->segment); in gst_adder_collected()
1176 if (!gst_pad_push_event (adder->srcpad, event)) { in gst_adder_collected()
1177 GST_WARNING_OBJECT (adder->srcpad, "Sending new segment event failed"); in gst_adder_collected()
1180 GST_WARNING_OBJECT (adder->srcpad, "Creating new segment event for " in gst_adder_collected()
1182 adder->segment.start, adder->segment.stop); in gst_adder_collected()
1191 GST_LOG_OBJECT (adder, in gst_adder_collected()
1219 GST_LOG_OBJECT (adder, "channel %p: no bytes available", collect_data); in gst_adder_collected()
1235 GST_DEBUG_OBJECT (adder, "channel %p: skipping muted pad", collect_data); in gst_adder_collected()
1249 GST_DEBUG_OBJECT (adder, "skipping, non-last GAP buffer"); in gst_adder_collected()
1260 GST_LOG_OBJECT (adder, "channel %p: preparing output buffer of %d bytes", in gst_adder_collected()
1270 switch (adder->info.finfo->format) { in gst_adder_collected()
1319 GST_LOG_OBJECT (adder, "channel %p: mixing %" G_GSIZE_FORMAT " bytes" in gst_adder_collected()
1324 switch (adder->info.finfo->format) { in gst_adder_collected()
1362 switch (adder->info.finfo->format) { in gst_adder_collected()
1403 GST_LOG_OBJECT (adder, "channel %p: skipping GAP buffer", collect_data); in gst_adder_collected()
1419 GST_LOG_OBJECT (adder, "reusing GAP buffer %p", gapbuf); in gst_adder_collected()
1427 gst_audio_format_fill_silence (adder->info.finfo, map.data, outsize); in gst_adder_collected()
1439 if (G_UNLIKELY (adder->pending_events)) { in gst_adder_collected()
1440 GList *tmp = adder->pending_events; in gst_adder_collected()
1445 gst_pad_push_event (adder->srcpad, ev); in gst_adder_collected()
1448 g_list_free (adder->pending_events); in gst_adder_collected()
1449 adder->pending_events = NULL; in gst_adder_collected()
1454 if (adder->segment.rate > 0.0) { in gst_adder_collected()
1455 next_offset = adder->offset + outsize / bpf; in gst_adder_collected()
1457 next_offset = adder->offset - outsize / bpf; in gst_adder_collected()
1463 if (adder->segment.rate > 0.0) { in gst_adder_collected()
1464 GST_BUFFER_PTS (outbuf) = adder->segment.position; in gst_adder_collected()
1465 GST_BUFFER_OFFSET (outbuf) = adder->offset; in gst_adder_collected()
1467 GST_BUFFER_DURATION (outbuf) = next_timestamp - adder->segment.position; in gst_adder_collected()
1471 GST_BUFFER_OFFSET_END (outbuf) = adder->offset; in gst_adder_collected()
1472 GST_BUFFER_DURATION (outbuf) = adder->segment.position - next_timestamp; in gst_adder_collected()
1480 adder->offset = next_offset; in gst_adder_collected()
1481 adder->segment.position = next_timestamp; in gst_adder_collected()
1484 GST_LOG_OBJECT (adder, "pushing outbuf %p, timestamp %" GST_TIME_FORMAT in gst_adder_collected()
1488 ret = gst_pad_push (adder->srcpad, outbuf); in gst_adder_collected()
1490 GST_LOG_OBJECT (adder, "pushed outbuf, result = %s", gst_flow_get_name (ret)); in gst_adder_collected()
1497 GST_ELEMENT_ERROR (adder, STREAM, FORMAT, (NULL), in gst_adder_collected()
1503 GST_DEBUG_OBJECT (adder, "no data available, must be EOS"); in gst_adder_collected()
1504 gst_pad_push_event (adder->srcpad, gst_event_new_eos ()); in gst_adder_collected()
1512 GstAdder *adder; in gst_adder_change_state() local
1515 adder = GST_ADDER (element); in gst_adder_change_state()
1521 adder->offset = 0; in gst_adder_change_state()
1522 adder->flush_stop_pending = FALSE; in gst_adder_change_state()
1523 adder->new_segment_pending = TRUE; in gst_adder_change_state()
1524 adder->send_stream_start = TRUE; in gst_adder_change_state()
1525 adder->send_caps = TRUE; in gst_adder_change_state()
1526 gst_caps_replace (&adder->current_caps, NULL); in gst_adder_change_state()
1527 gst_segment_init (&adder->segment, GST_FORMAT_TIME); in gst_adder_change_state()
1528 gst_collect_pads_start (adder->collect); in gst_adder_change_state()
1535 gst_collect_pads_stop (adder->collect); in gst_adder_change_state()
1556 GstAdder *adder = GST_ADDER (child_proxy); in gst_adder_child_proxy_get_child_by_index() local
1559 GST_OBJECT_LOCK (adder); in gst_adder_child_proxy_get_child_by_index()
1560 obj = g_list_nth_data (GST_ELEMENT_CAST (adder)->sinkpads, index); in gst_adder_child_proxy_get_child_by_index()
1563 GST_OBJECT_UNLOCK (adder); in gst_adder_child_proxy_get_child_by_index()
1571 GstAdder *adder = GST_ADDER (child_proxy); in gst_adder_child_proxy_get_children_count() local
1573 GST_OBJECT_LOCK (adder); in gst_adder_child_proxy_get_children_count()
1574 count = GST_ELEMENT_CAST (adder)->numsinkpads; in gst_adder_child_proxy_get_children_count()
1575 GST_OBJECT_UNLOCK (adder); in gst_adder_child_proxy_get_children_count()
1576 GST_INFO_OBJECT (adder, "Children Count: %d", count); in gst_adder_child_proxy_get_children_count()
1605 adder,