• Home
  • Raw
  • Download

Lines Matching refs:sink

145 static inline void gst_audio_base_sink_reset_sync (GstAudioBaseSink * sink);
147 GstAudioBaseSink * sink);
311 GstAudioBaseSink *sink; in gst_audio_base_sink_dispose() local
313 sink = GST_AUDIO_BASE_SINK (object); in gst_audio_base_sink_dispose()
315 if (sink->priv->custom_slaving_cb_notify) in gst_audio_base_sink_dispose()
316 sink->priv->custom_slaving_cb_notify (sink->priv->custom_slaving_cb_data); in gst_audio_base_sink_dispose()
318 if (sink->provided_clock) { in gst_audio_base_sink_dispose()
319 gst_audio_clock_invalidate (GST_AUDIO_CLOCK (sink->provided_clock)); in gst_audio_base_sink_dispose()
320 gst_object_unref (sink->provided_clock); in gst_audio_base_sink_dispose()
321 sink->provided_clock = NULL; in gst_audio_base_sink_dispose()
324 if (sink->ringbuffer) { in gst_audio_base_sink_dispose()
325 gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer)); in gst_audio_base_sink_dispose()
326 sink->ringbuffer = NULL; in gst_audio_base_sink_dispose()
336 GstAudioBaseSink *sink; in gst_audio_base_sink_provide_clock() local
339 sink = GST_AUDIO_BASE_SINK (elem); in gst_audio_base_sink_provide_clock()
342 if (sink->ringbuffer == NULL) in gst_audio_base_sink_provide_clock()
345 if (!gst_audio_ring_buffer_is_acquired (sink->ringbuffer)) in gst_audio_base_sink_provide_clock()
348 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_provide_clock()
349 if (!GST_OBJECT_FLAG_IS_SET (sink, GST_ELEMENT_FLAG_PROVIDE_CLOCK)) in gst_audio_base_sink_provide_clock()
352 clock = GST_CLOCK_CAST (gst_object_ref (sink->provided_clock)); in gst_audio_base_sink_provide_clock()
353 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_provide_clock()
360 GST_DEBUG_OBJECT (sink, "ringbuffer not acquired"); in gst_audio_base_sink_provide_clock()
365 GST_DEBUG_OBJECT (sink, "clock provide disabled"); in gst_audio_base_sink_provide_clock()
366 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_provide_clock()
372 gst_audio_base_sink_is_self_provided_clock (GstAudioBaseSink * sink) in gst_audio_base_sink_is_self_provided_clock() argument
374 return (sink->provided_clock && GST_IS_AUDIO_CLOCK (sink->provided_clock) && in gst_audio_base_sink_is_self_provided_clock()
375 GST_AUDIO_CLOCK_CAST (sink->provided_clock)->func == in gst_audio_base_sink_is_self_provided_clock()
512 gst_audio_base_sink_get_time (GstClock * clock, GstAudioBaseSink * sink) in gst_audio_base_sink_get_time() argument
520 if ((ringbuffer = sink->ringbuffer) == NULL) in gst_audio_base_sink_get_time()
540 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_get_time()
559 gst_audio_base_sink_set_provide_clock (GstAudioBaseSink * sink, in gst_audio_base_sink_set_provide_clock() argument
562 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_set_provide_clock()
564 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_set_provide_clock()
566 GST_OBJECT_FLAG_SET (sink, GST_ELEMENT_FLAG_PROVIDE_CLOCK); in gst_audio_base_sink_set_provide_clock()
568 GST_OBJECT_FLAG_UNSET (sink, GST_ELEMENT_FLAG_PROVIDE_CLOCK); in gst_audio_base_sink_set_provide_clock()
569 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_set_provide_clock()
582 gst_audio_base_sink_get_provide_clock (GstAudioBaseSink * sink) in gst_audio_base_sink_get_provide_clock() argument
586 g_return_val_if_fail (GST_IS_AUDIO_BASE_SINK (sink), FALSE); in gst_audio_base_sink_get_provide_clock()
588 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_get_provide_clock()
589 result = GST_OBJECT_FLAG_IS_SET (sink, GST_ELEMENT_FLAG_PROVIDE_CLOCK); in gst_audio_base_sink_get_provide_clock()
590 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_get_provide_clock()
603 gst_audio_base_sink_set_slave_method (GstAudioBaseSink * sink, in gst_audio_base_sink_set_slave_method() argument
606 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_set_slave_method()
608 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_set_slave_method()
609 sink->priv->slave_method = method; in gst_audio_base_sink_set_slave_method()
610 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_set_slave_method()
622 gst_audio_base_sink_get_slave_method (GstAudioBaseSink * sink) in gst_audio_base_sink_get_slave_method() argument
626 g_return_val_if_fail (GST_IS_AUDIO_BASE_SINK (sink), -1); in gst_audio_base_sink_get_slave_method()
628 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_get_slave_method()
629 result = sink->priv->slave_method; in gst_audio_base_sink_get_slave_method()
630 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_get_slave_method()
644 gst_audio_base_sink_set_drift_tolerance (GstAudioBaseSink * sink, in gst_audio_base_sink_set_drift_tolerance() argument
647 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_set_drift_tolerance()
649 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_set_drift_tolerance()
650 sink->priv->drift_tolerance = drift_tolerance; in gst_audio_base_sink_set_drift_tolerance()
651 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_set_drift_tolerance()
663 gst_audio_base_sink_get_drift_tolerance (GstAudioBaseSink * sink) in gst_audio_base_sink_get_drift_tolerance() argument
667 g_return_val_if_fail (GST_IS_AUDIO_BASE_SINK (sink), -1); in gst_audio_base_sink_get_drift_tolerance()
669 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_get_drift_tolerance()
670 result = sink->priv->drift_tolerance; in gst_audio_base_sink_get_drift_tolerance()
671 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_get_drift_tolerance()
684 gst_audio_base_sink_set_alignment_threshold (GstAudioBaseSink * sink, in gst_audio_base_sink_set_alignment_threshold() argument
687 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_set_alignment_threshold()
690 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_set_alignment_threshold()
691 sink->priv->alignment_threshold = alignment_threshold; in gst_audio_base_sink_set_alignment_threshold()
692 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_set_alignment_threshold()
704 gst_audio_base_sink_get_alignment_threshold (GstAudioBaseSink * sink) in gst_audio_base_sink_get_alignment_threshold() argument
708 g_return_val_if_fail (GST_IS_AUDIO_BASE_SINK (sink), GST_CLOCK_TIME_NONE); in gst_audio_base_sink_get_alignment_threshold()
710 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_get_alignment_threshold()
711 result = sink->priv->alignment_threshold; in gst_audio_base_sink_get_alignment_threshold()
712 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_get_alignment_threshold()
725 gst_audio_base_sink_set_discont_wait (GstAudioBaseSink * sink, in gst_audio_base_sink_set_discont_wait() argument
728 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_set_discont_wait()
731 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_set_discont_wait()
732 sink->priv->discont_wait = discont_wait; in gst_audio_base_sink_set_discont_wait()
733 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_set_discont_wait()
755 gst_audio_base_sink_set_custom_slaving_callback (GstAudioBaseSink * sink, in gst_audio_base_sink_set_custom_slaving_callback() argument
759 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_set_custom_slaving_callback()
761 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_set_custom_slaving_callback()
762 sink->priv->custom_slaving_callback = callback; in gst_audio_base_sink_set_custom_slaving_callback()
763 sink->priv->custom_slaving_cb_data = user_data; in gst_audio_base_sink_set_custom_slaving_callback()
764 sink->priv->custom_slaving_cb_notify = notify; in gst_audio_base_sink_set_custom_slaving_callback()
765 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_set_custom_slaving_callback()
769 gst_audio_base_sink_custom_cb_report_discont (GstAudioBaseSink * sink, in gst_audio_base_sink_custom_cb_report_discont() argument
772 if ((sink->priv->custom_slaving_callback != NULL) && in gst_audio_base_sink_custom_cb_report_discont()
773 (sink->priv->slave_method == GST_AUDIO_BASE_SINK_SLAVE_CUSTOM)) { in gst_audio_base_sink_custom_cb_report_discont()
774 sink->priv->custom_slaving_callback (sink, GST_CLOCK_TIME_NONE, in gst_audio_base_sink_custom_cb_report_discont()
776 sink->priv->custom_slaving_cb_data); in gst_audio_base_sink_custom_cb_report_discont()
793 gst_audio_base_sink_report_device_failure (GstAudioBaseSink * sink) in gst_audio_base_sink_report_device_failure() argument
795 g_return_if_fail (GST_IS_AUDIO_BASE_SINK (sink)); in gst_audio_base_sink_report_device_failure()
797 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_report_device_failure()
798 gst_audio_base_sink_custom_cb_report_discont (sink, in gst_audio_base_sink_report_device_failure()
800 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_report_device_failure()
812 gst_audio_base_sink_get_discont_wait (GstAudioBaseSink * sink) in gst_audio_base_sink_get_discont_wait() argument
816 g_return_val_if_fail (GST_IS_AUDIO_BASE_SINK (sink), -1); in gst_audio_base_sink_get_discont_wait()
818 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_get_discont_wait()
819 result = sink->priv->discont_wait; in gst_audio_base_sink_get_discont_wait()
820 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_get_discont_wait()
829 GstAudioBaseSink *sink; in gst_audio_base_sink_set_property() local
831 sink = GST_AUDIO_BASE_SINK (object); in gst_audio_base_sink_set_property()
835 sink->buffer_time = g_value_get_int64 (value); in gst_audio_base_sink_set_property()
838 sink->latency_time = g_value_get_int64 (value); in gst_audio_base_sink_set_property()
841 gst_audio_base_sink_set_provide_clock (sink, g_value_get_boolean (value)); in gst_audio_base_sink_set_property()
844 gst_audio_base_sink_set_slave_method (sink, g_value_get_enum (value)); in gst_audio_base_sink_set_property()
847 GST_BASE_SINK (sink)->can_activate_pull = g_value_get_boolean (value); in gst_audio_base_sink_set_property()
850 gst_audio_base_sink_set_drift_tolerance (sink, g_value_get_int64 (value)); in gst_audio_base_sink_set_property()
853 gst_audio_base_sink_set_alignment_threshold (sink, in gst_audio_base_sink_set_property()
857 gst_audio_base_sink_set_discont_wait (sink, g_value_get_uint64 (value)); in gst_audio_base_sink_set_property()
869 GstAudioBaseSink *sink; in gst_audio_base_sink_get_property() local
871 sink = GST_AUDIO_BASE_SINK (object); in gst_audio_base_sink_get_property()
875 g_value_set_int64 (value, sink->buffer_time); in gst_audio_base_sink_get_property()
878 g_value_set_int64 (value, sink->latency_time); in gst_audio_base_sink_get_property()
881 g_value_set_boolean (value, gst_audio_base_sink_get_provide_clock (sink)); in gst_audio_base_sink_get_property()
884 g_value_set_enum (value, gst_audio_base_sink_get_slave_method (sink)); in gst_audio_base_sink_get_property()
887 g_value_set_boolean (value, GST_BASE_SINK (sink)->can_activate_pull); in gst_audio_base_sink_get_property()
890 g_value_set_int64 (value, gst_audio_base_sink_get_drift_tolerance (sink)); in gst_audio_base_sink_get_property()
894 gst_audio_base_sink_get_alignment_threshold (sink)); in gst_audio_base_sink_get_property()
897 g_value_set_uint64 (value, gst_audio_base_sink_get_discont_wait (sink)); in gst_audio_base_sink_get_property()
908 GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink); in gst_audio_base_sink_setcaps() local
913 if (!sink->ringbuffer) in gst_audio_base_sink_setcaps()
916 spec = &sink->ringbuffer->spec; in gst_audio_base_sink_setcaps()
919 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_setcaps()
924 GST_DEBUG_OBJECT (sink, "release old ringbuffer"); in gst_audio_base_sink_setcaps()
930 now = gst_clock_get_time (sink->provided_clock); in gst_audio_base_sink_setcaps()
931 internal_time = gst_clock_get_internal_time (sink->provided_clock); in gst_audio_base_sink_setcaps()
933 GST_DEBUG_OBJECT (sink, "time was %" GST_TIME_FORMAT, GST_TIME_ARGS (now)); in gst_audio_base_sink_setcaps()
936 gst_audio_ring_buffer_pause (sink->ringbuffer); in gst_audio_base_sink_setcaps()
937 gst_audio_ring_buffer_activate (sink->ringbuffer, FALSE); in gst_audio_base_sink_setcaps()
938 gst_audio_ring_buffer_release (sink->ringbuffer); in gst_audio_base_sink_setcaps()
940 GST_DEBUG_OBJECT (sink, "parse caps"); in gst_audio_base_sink_setcaps()
942 spec->buffer_time = sink->buffer_time; in gst_audio_base_sink_setcaps()
943 spec->latency_time = sink->latency_time; in gst_audio_base_sink_setcaps()
951 GST_DEBUG_OBJECT (sink, "acquire ringbuffer"); in gst_audio_base_sink_setcaps()
952 if (!gst_audio_ring_buffer_acquire (sink->ringbuffer, spec)) in gst_audio_base_sink_setcaps()
957 if (gst_audio_base_sink_is_self_provided_clock (sink)) in gst_audio_base_sink_setcaps()
958 gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0); in gst_audio_base_sink_setcaps()
961 gst_audio_base_sink_reset_sync (sink); in gst_audio_base_sink_setcaps()
963 gst_audio_base_sink_custom_cb_report_discont (sink, in gst_audio_base_sink_setcaps()
967 GST_DEBUG_OBJECT (sink, "activate ringbuffer"); in gst_audio_base_sink_setcaps()
968 gst_audio_ring_buffer_activate (sink->ringbuffer, TRUE); in gst_audio_base_sink_setcaps()
972 gst_clock_get_calibration (sink->provided_clock, NULL, NULL, in gst_audio_base_sink_setcaps()
974 gst_clock_set_calibration (sink->provided_clock, in gst_audio_base_sink_setcaps()
994 GST_DEBUG_OBJECT (sink, "could not parse caps"); in gst_audio_base_sink_setcaps()
995 GST_ELEMENT_ERROR (sink, STREAM, FORMAT, in gst_audio_base_sink_setcaps()
1001 GST_DEBUG_OBJECT (sink, "could not acquire ringbuffer"); in gst_audio_base_sink_setcaps()
1039 gst_audio_base_sink_reset_sync (GstAudioBaseSink * sink) in gst_audio_base_sink_reset_sync() argument
1041 sink->next_sample = -1; in gst_audio_base_sink_reset_sync()
1042 sink->priv->eos_time = -1; in gst_audio_base_sink_reset_sync()
1043 sink->priv->discont_time = -1; in gst_audio_base_sink_reset_sync()
1044 sink->priv->avg_skew = -1; in gst_audio_base_sink_reset_sync()
1045 sink->priv->last_align = 0; in gst_audio_base_sink_reset_sync()
1059 gst_audio_base_sink_force_start (GstAudioBaseSink * sink) in gst_audio_base_sink_force_start() argument
1063 g_atomic_int_set (&sink->eos_rendering, 1); in gst_audio_base_sink_force_start()
1064 gst_audio_ring_buffer_start (sink->ringbuffer); in gst_audio_base_sink_force_start()
1065 g_atomic_int_set (&sink->eos_rendering, 0); in gst_audio_base_sink_force_start()
1070 gst_audio_base_sink_drain (GstAudioBaseSink * sink) in gst_audio_base_sink_drain() argument
1073 if (!sink->ringbuffer) in gst_audio_base_sink_drain()
1075 if (!sink->ringbuffer->spec.info.rate) in gst_audio_base_sink_drain()
1080 g_atomic_int_set (&sink->eos_rendering, 1); in gst_audio_base_sink_drain()
1085 if (gst_audio_ring_buffer_is_acquired (sink->ringbuffer)) in gst_audio_base_sink_drain()
1086 gst_audio_ring_buffer_start (sink->ringbuffer); in gst_audio_base_sink_drain()
1088 if (sink->priv->eos_time != -1) { in gst_audio_base_sink_drain()
1089 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_drain()
1091 GST_TIME_ARGS (sink->priv->eos_time)); in gst_audio_base_sink_drain()
1095 ret = gst_base_sink_wait (GST_BASE_SINK (sink), sink->priv->eos_time, NULL); in gst_audio_base_sink_drain()
1097 GST_DEBUG_OBJECT (sink, "drained audio"); in gst_audio_base_sink_drain()
1099 g_atomic_int_set (&sink->eos_rendering, 0); in gst_audio_base_sink_drain()
1106 GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink); in gst_audio_base_sink_wait_event() local
1116 if (G_UNLIKELY (!gst_audio_ring_buffer_is_acquired (sink->ringbuffer))) { in gst_audio_base_sink_wait_event()
1117 GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), in gst_audio_base_sink_wait_event()
1123 gst_audio_base_sink_force_start (sink); in gst_audio_base_sink_wait_event()
1125 g_atomic_int_set (&sink->eos_rendering, 1); in gst_audio_base_sink_wait_event()
1139 ret = gst_audio_base_sink_drain (sink); in gst_audio_base_sink_wait_event()
1147 g_atomic_int_set (&sink->eos_rendering, 0); in gst_audio_base_sink_wait_event()
1154 GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink); in gst_audio_base_sink_event() local
1158 if (sink->ringbuffer) in gst_audio_base_sink_event()
1159 gst_audio_ring_buffer_set_flushing (sink->ringbuffer, TRUE); in gst_audio_base_sink_event()
1163 gst_audio_base_sink_reset_sync (sink); in gst_audio_base_sink_event()
1165 gst_audio_base_sink_custom_cb_report_discont (sink, in gst_audio_base_sink_event()
1168 if (sink->ringbuffer) in gst_audio_base_sink_event()
1169 gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE); in gst_audio_base_sink_event()
1180 GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (bsink); in gst_audio_base_sink_preroll() local
1182 if (!gst_audio_ring_buffer_is_acquired (sink->ringbuffer)) in gst_audio_base_sink_preroll()
1192 GST_DEBUG_OBJECT (sink, "ringbuffer in wrong state"); in gst_audio_base_sink_preroll()
1193 GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), ("sink not negotiated.")); in gst_audio_base_sink_preroll()
1199 gst_audio_base_sink_get_offset (GstAudioBaseSink * sink) in gst_audio_base_sink_get_offset() argument
1206 sample = sink->next_sample; in gst_audio_base_sink_get_offset()
1211 sps = sink->ringbuffer->samples_per_seg; in gst_audio_base_sink_get_offset()
1218 segdone = g_atomic_int_get (&sink->ringbuffer->segdone) in gst_audio_base_sink_get_offset()
1219 - sink->ringbuffer->segbase; in gst_audio_base_sink_get_offset()
1259 gst_audio_base_sink_custom_slaving (GstAudioBaseSink * sink, in gst_audio_base_sink_custom_slaving() argument
1270 gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal, in gst_audio_base_sink_custom_slaving()
1274 etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink)); in gst_audio_base_sink_custom_slaving()
1275 itime = gst_audio_clock_get_time (GST_AUDIO_CLOCK (sink->provided_clock)); in gst_audio_base_sink_custom_slaving()
1277 gst_audio_clock_adjust (GST_AUDIO_CLOCK (sink->provided_clock), itime); in gst_audio_base_sink_custom_slaving()
1279 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_custom_slaving()
1292 if (sink->priv->custom_slaving_callback != NULL) { in gst_audio_base_sink_custom_slaving()
1293 sink->priv->custom_slaving_callback (sink, etime, itime, &requested_skew, in gst_audio_base_sink_custom_slaving()
1294 FALSE, sink->priv->custom_slaving_cb_data); in gst_audio_base_sink_custom_slaving()
1295 GST_DEBUG_OBJECT (sink, "custom slaving requested skew %" GST_STIME_FORMAT, in gst_audio_base_sink_custom_slaving()
1298 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_custom_slaving()
1306 (sink->ringbuffer->spec.info.rate * requested_skew) / GST_SECOND; in gst_audio_base_sink_custom_slaving()
1307 last_align = sink->priv->last_align; in gst_audio_base_sink_custom_slaving()
1312 sink->next_sample = -1; in gst_audio_base_sink_custom_slaving()
1314 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_custom_slaving()
1316 G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample); in gst_audio_base_sink_custom_slaving()
1318 gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal, in gst_audio_base_sink_custom_slaving()
1324 (sink->ringbuffer->spec.info.rate * ABS (requested_skew)) / GST_SECOND; in gst_audio_base_sink_custom_slaving()
1325 last_align = sink->priv->last_align; in gst_audio_base_sink_custom_slaving()
1330 sink->next_sample = -1; in gst_audio_base_sink_custom_slaving()
1332 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_custom_slaving()
1334 G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample); in gst_audio_base_sink_custom_slaving()
1336 gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal, in gst_audio_base_sink_custom_slaving()
1353 gst_audio_base_sink_resample_slaving (GstAudioBaseSink * sink, in gst_audio_base_sink_resample_slaving() argument
1369 etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink)); in gst_audio_base_sink_resample_slaving()
1370 itime = gst_audio_clock_get_time (sink->provided_clock); in gst_audio_base_sink_resample_slaving()
1373 gst_clock_add_observation (sink->provided_clock, itime, etime, &r_squared); in gst_audio_base_sink_resample_slaving()
1378 gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal, in gst_audio_base_sink_resample_slaving()
1381 GST_DEBUG_OBJECT (sink, "internal %" GST_TIME_FORMAT " external %" in gst_audio_base_sink_resample_slaving()
1396 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_resample_slaving()
1407 gst_audio_base_sink_skew_slaving (GstAudioBaseSink * sink, in gst_audio_base_sink_skew_slaving() argument
1418 gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal, in gst_audio_base_sink_skew_slaving()
1422 etime = gst_clock_get_time (GST_ELEMENT_CLOCK (sink)); in gst_audio_base_sink_skew_slaving()
1423 itime = gst_audio_clock_get_time (GST_AUDIO_CLOCK (sink->provided_clock)); in gst_audio_base_sink_skew_slaving()
1425 gst_audio_clock_adjust (GST_AUDIO_CLOCK (sink->provided_clock), itime); in gst_audio_base_sink_skew_slaving()
1427 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_skew_slaving()
1441 if (sink->priv->avg_skew == -1) { in gst_audio_base_sink_skew_slaving()
1443 sink->priv->avg_skew = skew; in gst_audio_base_sink_skew_slaving()
1446 sink->priv->avg_skew = (31 * sink->priv->avg_skew + skew) / 32; in gst_audio_base_sink_skew_slaving()
1449 GST_DEBUG_OBJECT (sink, "internal %" GST_TIME_FORMAT " external %" in gst_audio_base_sink_skew_slaving()
1452 GST_STIME_ARGS (sink->priv->avg_skew)); in gst_audio_base_sink_skew_slaving()
1455 mdrift2 = (sink->priv->drift_tolerance * 1000) / 2; in gst_audio_base_sink_skew_slaving()
1458 if (sink->priv->avg_skew > mdrift2) { in gst_audio_base_sink_skew_slaving()
1460 GST_WARNING_OBJECT (sink, in gst_audio_base_sink_skew_slaving()
1462 GST_STIME_ARGS (sink->priv->avg_skew), GST_STIME_ARGS (mdrift2)); in gst_audio_base_sink_skew_slaving()
1468 if (G_LIKELY (cexternal > sink->priv->avg_skew)) in gst_audio_base_sink_skew_slaving()
1469 drift = sink->priv->avg_skew; in gst_audio_base_sink_skew_slaving()
1473 sink->priv->avg_skew -= drift; in gst_audio_base_sink_skew_slaving()
1475 driftsamples = (sink->ringbuffer->spec.info.rate * drift) / GST_SECOND; in gst_audio_base_sink_skew_slaving()
1476 last_align = sink->priv->last_align; in gst_audio_base_sink_skew_slaving()
1481 sink->next_sample = -1; in gst_audio_base_sink_skew_slaving()
1483 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_skew_slaving()
1485 G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample); in gst_audio_base_sink_skew_slaving()
1487 gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal, in gst_audio_base_sink_skew_slaving()
1489 } else if (sink->priv->avg_skew < -mdrift2) { in gst_audio_base_sink_skew_slaving()
1491 GST_WARNING_OBJECT (sink, in gst_audio_base_sink_skew_slaving()
1493 GST_STIME_ARGS (sink->priv->avg_skew), GST_STIME_ARGS (mdrift2)); in gst_audio_base_sink_skew_slaving()
1499 drift = -sink->priv->avg_skew; in gst_audio_base_sink_skew_slaving()
1501 sink->priv->avg_skew = 0; in gst_audio_base_sink_skew_slaving()
1503 driftsamples = (sink->ringbuffer->spec.info.rate * drift) / GST_SECOND; in gst_audio_base_sink_skew_slaving()
1504 last_align = sink->priv->last_align; in gst_audio_base_sink_skew_slaving()
1509 sink->next_sample = -1; in gst_audio_base_sink_skew_slaving()
1511 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_skew_slaving()
1513 G_GUINT64_FORMAT, last_align, driftsamples, sink->next_sample); in gst_audio_base_sink_skew_slaving()
1515 gst_clock_set_calibration (sink->provided_clock, cinternal, cexternal, in gst_audio_base_sink_skew_slaving()
1531 gst_audio_base_sink_none_slaving (GstAudioBaseSink * sink, in gst_audio_base_sink_none_slaving() argument
1538 gst_clock_get_calibration (sink->provided_clock, &cinternal, &cexternal, in gst_audio_base_sink_none_slaving()
1553 gst_audio_base_sink_handle_slaving (GstAudioBaseSink * sink, in gst_audio_base_sink_handle_slaving() argument
1557 switch (sink->priv->slave_method) { in gst_audio_base_sink_handle_slaving()
1559 gst_audio_base_sink_resample_slaving (sink, render_start, render_stop, in gst_audio_base_sink_handle_slaving()
1563 gst_audio_base_sink_skew_slaving (sink, render_start, render_stop, in gst_audio_base_sink_handle_slaving()
1567 gst_audio_base_sink_none_slaving (sink, render_start, render_stop, in gst_audio_base_sink_handle_slaving()
1571 gst_audio_base_sink_custom_slaving (sink, render_start, render_stop, in gst_audio_base_sink_handle_slaving()
1575 g_warning ("unknown slaving method %d", sink->priv->slave_method); in gst_audio_base_sink_handle_slaving()
1588 GstAudioBaseSink *sink; in gst_audio_base_sink_sync_latency() local
1593 sink = GST_AUDIO_BASE_SINK (bsink); in gst_audio_base_sink_sync_latency()
1595 clock = GST_ELEMENT_CLOCK (sink); in gst_audio_base_sink_sync_latency()
1600 if (clock == sink->provided_clock) in gst_audio_base_sink_sync_latency()
1603 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_sync_latency()
1606 GST_DEBUG_OBJECT (sink, "checking preroll"); in gst_audio_base_sink_sync_latency()
1612 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_sync_latency()
1613 time = sink->priv->us_latency; in gst_audio_base_sink_sync_latency()
1614 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_sync_latency()
1626 GST_DEBUG_OBJECT (sink, "possibly waiting for clock to reach %" in gst_audio_base_sink_sync_latency()
1633 GST_DEBUG_OBJECT (sink, "clock returned %d %" GST_TIME_FORMAT, status, in gst_audio_base_sink_sync_latency()
1648 GST_DEBUG_OBJECT (sink, "latency synced"); in gst_audio_base_sink_sync_latency()
1652 itime = gst_audio_clock_get_time (GST_AUDIO_CLOCK (sink->provided_clock)); in gst_audio_base_sink_sync_latency()
1654 gst_audio_clock_adjust (GST_AUDIO_CLOCK (sink->provided_clock), itime); in gst_audio_base_sink_sync_latency()
1656 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_sync_latency()
1661 etime = GST_ELEMENT_CAST (sink)->base_time + time; in gst_audio_base_sink_sync_latency()
1665 GST_DEBUG_OBJECT (sink, "late preroll, adding jitter"); in gst_audio_base_sink_sync_latency()
1670 gst_audio_base_sink_force_start (sink); in gst_audio_base_sink_sync_latency()
1672 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_sync_latency()
1678 gst_clock_get_calibration (sink->provided_clock, NULL, NULL, &rate_num, in gst_audio_base_sink_sync_latency()
1680 gst_clock_set_calibration (sink->provided_clock, itime, etime, in gst_audio_base_sink_sync_latency()
1683 switch (sink->priv->slave_method) { in gst_audio_base_sink_sync_latency()
1686 GST_DEBUG_OBJECT (sink, "Setting clock as master"); in gst_audio_base_sink_sync_latency()
1687 gst_clock_set_master (sink->provided_clock, clock); in gst_audio_base_sink_sync_latency()
1696 gst_audio_base_sink_reset_sync (sink); in gst_audio_base_sink_sync_latency()
1698 gst_audio_base_sink_custom_cb_report_discont (sink, in gst_audio_base_sink_sync_latency()
1706 GST_DEBUG_OBJECT (sink, "we have no clock"); in gst_audio_base_sink_sync_latency()
1711 GST_DEBUG_OBJECT (sink, "we are not slaved"); in gst_audio_base_sink_sync_latency()
1716 GST_DEBUG_OBJECT (sink, "we are flushing"); in gst_audio_base_sink_sync_latency()
1717 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_sync_latency()
1723 gst_audio_base_sink_get_alignment (GstAudioBaseSink * sink, in gst_audio_base_sink_get_alignment() argument
1726 GstAudioRingBuffer *ringbuf = sink->ringbuffer; in gst_audio_base_sink_get_alignment()
1741 align = sink->next_sample - sample_offset; in gst_audio_base_sink_get_alignment()
1746 max_sample_diff = gst_util_uint64_scale_int (sink->priv->alignment_threshold, in gst_audio_base_sink_get_alignment()
1755 if (sink->priv->discont_wait > 0) { in gst_audio_base_sink_get_alignment()
1758 if (sink->priv->discont_time == -1) { in gst_audio_base_sink_get_alignment()
1760 sink->priv->discont_time = time; in gst_audio_base_sink_get_alignment()
1761 } else if (time - sink->priv->discont_time >= sink->priv->discont_wait) { in gst_audio_base_sink_get_alignment()
1764 sink->priv->discont_time = -1; in gst_audio_base_sink_get_alignment()
1769 } else if (G_UNLIKELY (sink->priv->discont_time != -1)) { in gst_audio_base_sink_get_alignment()
1771 sink->priv->discont_time = -1; in gst_audio_base_sink_get_alignment()
1775 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_get_alignment()
1786 GST_WARNING_OBJECT (sink, in gst_audio_base_sink_get_alignment()
1789 sample_offset > sink->next_sample ? "+" : "-", GST_TIME_ARGS (diff_s)); in gst_audio_base_sink_get_alignment()
1792 gst_audio_base_sink_custom_cb_report_discont (sink, in gst_audio_base_sink_get_alignment()
1805 GstAudioBaseSink *sink; in gst_audio_base_sink_render() local
1824 sink = GST_AUDIO_BASE_SINK (bsink); in gst_audio_base_sink_render()
1825 bclass = GST_AUDIO_BASE_SINK_GET_CLASS (sink); in gst_audio_base_sink_render()
1827 ringbuf = sink->ringbuffer; in gst_audio_base_sink_render()
1836 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_render()
1837 base_time = GST_ELEMENT_CAST (sink)->base_time; in gst_audio_base_sink_render()
1838 if (G_UNLIKELY (sink->priv->sync_latency)) { in gst_audio_base_sink_render()
1840 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_render()
1844 sink->priv->sync_latency = FALSE; in gst_audio_base_sink_render()
1846 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_render()
1852 out = bclass->payload (sink, buf); in gst_audio_base_sink_render()
1890 sink->next_sample = -1; in gst_audio_base_sink_render()
1894 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
1904 render_start = gst_audio_base_sink_get_offset (sink); in gst_audio_base_sink_render()
1906 GST_DEBUG_OBJECT (sink, "Buffer of size %" G_GSIZE_FORMAT " has no time." in gst_audio_base_sink_render()
1931 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
1957 GST_DEBUG_OBJECT (sink, "clipping start to %" GST_TIME_FORMAT " %" in gst_audio_base_sink_render()
1967 GST_DEBUG_OBJECT (sink, "clipping stop to %" GST_TIME_FORMAT " %" in gst_audio_base_sink_render()
1981 render_start = gst_audio_base_sink_get_offset (sink); in gst_audio_base_sink_render()
1983 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
1997 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2004 sink->priv->eos_time = render_stop; in gst_audio_base_sink_render()
2006 sink->priv->eos_time = render_start; in gst_audio_base_sink_render()
2012 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2020 GST_DEBUG_OBJECT (sink, "adding base_time %" GST_TIME_FORMAT, in gst_audio_base_sink_render()
2028 if (G_UNLIKELY ((slaved = (clock != sink->provided_clock)))) { in gst_audio_base_sink_render()
2030 gst_audio_base_sink_handle_slaving (sink, render_start, render_stop, in gst_audio_base_sink_render()
2035 gst_audio_base_sink_none_slaving (sink, render_start, render_stop, in gst_audio_base_sink_render()
2039 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2044 time_offset = GST_AUDIO_CLOCK_CAST (sink->provided_clock)->time_offset; in gst_audio_base_sink_render()
2047 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2103 GST_DEBUG_OBJECT (sink, "resync after discont/resync"); in gst_audio_base_sink_render()
2108 if (G_UNLIKELY (sink->next_sample == -1)) { in gst_audio_base_sink_render()
2109 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2114 align = gst_audio_base_sink_get_alignment (sink, sample_offset); in gst_audio_base_sink_render()
2115 sink->priv->last_align = align; in gst_audio_base_sink_render()
2122 && sink->priv->slave_method == GST_AUDIO_BASE_SINK_SLAVE_RESAMPLE)) { in gst_audio_base_sink_render()
2123 GST_DEBUG_OBJECT (sink, "no stop time align needed: we are slaved"); in gst_audio_base_sink_render()
2138 GST_DEBUG_OBJECT (sink, "rendering at %" G_GUINT64_FORMAT " %d/%d", in gst_audio_base_sink_render()
2150 GST_DEBUG_OBJECT (sink, "wrote %u of %u", written, samples); in gst_audio_base_sink_render()
2177 sink->next_sample = sample_offset; in gst_audio_base_sink_render()
2179 sink->next_sample = -1; in gst_audio_base_sink_render()
2181 GST_DEBUG_OBJECT (sink, "next sample expected at %" G_GUINT64_FORMAT, in gst_audio_base_sink_render()
2182 sink->next_sample); in gst_audio_base_sink_render()
2186 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2188 gst_audio_base_sink_force_start (sink); in gst_audio_base_sink_render()
2202 GST_DEBUG_OBJECT (sink, in gst_audio_base_sink_render()
2211 GST_DEBUG_OBJECT (sink, "dropping late sample"); in gst_audio_base_sink_render()
2218 GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), ("failed to payload.")); in gst_audio_base_sink_render()
2224 GST_DEBUG_OBJECT (sink, "ringbuffer not negotiated"); in gst_audio_base_sink_render()
2225 GST_ELEMENT_ERROR (sink, STREAM, FORMAT, (NULL), ("sink not negotiated.")); in gst_audio_base_sink_render()
2231 GST_DEBUG_OBJECT (sink, "wrong size"); in gst_audio_base_sink_render()
2232 GST_ELEMENT_ERROR (sink, STREAM, WRONG_TYPE, in gst_audio_base_sink_render()
2239 GST_DEBUG_OBJECT (sink, "preroll got interrupted: %d (%s)", ret, in gst_audio_base_sink_render()
2246 GST_DEBUG_OBJECT (sink, "failed waiting for latency"); in gst_audio_base_sink_render()
2262 gst_audio_base_sink_create_ringbuffer (GstAudioBaseSink * sink) in gst_audio_base_sink_create_ringbuffer() argument
2267 bclass = GST_AUDIO_BASE_SINK_GET_CLASS (sink); in gst_audio_base_sink_create_ringbuffer()
2269 buffer = bclass->create_ringbuffer (sink); in gst_audio_base_sink_create_ringbuffer()
2272 gst_object_set_parent (GST_OBJECT (buffer), GST_OBJECT (sink)); in gst_audio_base_sink_create_ringbuffer()
2282 GstAudioBaseSink *sink; in gst_audio_base_sink_callback() local
2288 sink = GST_AUDIO_BASE_SINK (user_data); in gst_audio_base_sink_callback()
2347 GST_DEBUG_OBJECT (sink, "EOS"); in gst_audio_base_sink_callback()
2348 gst_audio_base_sink_drain (sink); in gst_audio_base_sink_callback()
2350 gst_element_post_message (GST_ELEMENT_CAST (sink), in gst_audio_base_sink_callback()
2351 gst_message_new_eos (GST_OBJECT_CAST (sink))); in gst_audio_base_sink_callback()
2357 GST_DEBUG_OBJECT (sink, "we are flushing"); in gst_audio_base_sink_callback()
2365 GST_DEBUG_OBJECT (sink, "error %s", gst_flow_get_name (ret)); in gst_audio_base_sink_callback()
2377 GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (basesink); in gst_audio_base_sink_activate_pull() local
2382 gst_audio_ring_buffer_set_callback (sink->ringbuffer, in gst_audio_base_sink_activate_pull()
2383 gst_audio_base_sink_callback, sink); in gst_audio_base_sink_activate_pull()
2385 ret = gst_audio_ring_buffer_activate (sink->ringbuffer, TRUE); in gst_audio_base_sink_activate_pull()
2388 gst_audio_ring_buffer_set_callback (sink->ringbuffer, NULL, NULL); in gst_audio_base_sink_activate_pull()
2389 ret = gst_audio_ring_buffer_activate (sink->ringbuffer, FALSE); in gst_audio_base_sink_activate_pull()
2400 GstAudioBaseSink *sink = GST_AUDIO_BASE_SINK (element); in gst_audio_base_sink_change_state() local
2406 gst_audio_clock_reset (GST_AUDIO_CLOCK (sink->provided_clock), 0); in gst_audio_base_sink_change_state()
2407 rb = gst_audio_base_sink_create_ringbuffer (sink); in gst_audio_base_sink_change_state()
2411 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_change_state()
2412 sink->ringbuffer = rb; in gst_audio_base_sink_change_state()
2413 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_change_state()
2415 if (!gst_audio_ring_buffer_open_device (sink->ringbuffer)) { in gst_audio_base_sink_change_state()
2416 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_change_state()
2417 gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer)); in gst_audio_base_sink_change_state()
2418 sink->ringbuffer = NULL; in gst_audio_base_sink_change_state()
2419 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_change_state()
2425 gst_audio_base_sink_reset_sync (sink); in gst_audio_base_sink_change_state()
2426 gst_audio_ring_buffer_set_flushing (sink->ringbuffer, FALSE); in gst_audio_base_sink_change_state()
2427 gst_audio_ring_buffer_may_start (sink->ringbuffer, FALSE); in gst_audio_base_sink_change_state()
2432 if (gst_audio_base_sink_is_self_provided_clock (sink)) in gst_audio_base_sink_change_state()
2435 sink->provided_clock, TRUE)); in gst_audio_base_sink_change_state()
2441 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_change_state()
2442 GST_DEBUG_OBJECT (sink, "ringbuffer may start now"); in gst_audio_base_sink_change_state()
2443 sink->priv->sync_latency = TRUE; in gst_audio_base_sink_change_state()
2444 eos = GST_BASE_SINK (sink)->eos; in gst_audio_base_sink_change_state()
2445 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_change_state()
2447 gst_audio_ring_buffer_may_start (sink->ringbuffer, TRUE); in gst_audio_base_sink_change_state()
2448 if (GST_BASE_SINK_CAST (sink)->pad_mode == GST_PAD_MODE_PULL || in gst_audio_base_sink_change_state()
2449 g_atomic_int_get (&sink->eos_rendering) || eos) { in gst_audio_base_sink_change_state()
2453 gst_audio_ring_buffer_start (sink->ringbuffer); in gst_audio_base_sink_change_state()
2459 gst_audio_ring_buffer_may_start (sink->ringbuffer, FALSE); in gst_audio_base_sink_change_state()
2460 gst_audio_ring_buffer_pause (sink->ringbuffer); in gst_audio_base_sink_change_state()
2462 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_change_state()
2463 sink->priv->sync_latency = FALSE; in gst_audio_base_sink_change_state()
2464 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_change_state()
2470 if (gst_audio_base_sink_is_self_provided_clock (sink)) in gst_audio_base_sink_change_state()
2473 sink->provided_clock)); in gst_audio_base_sink_change_state()
2477 gst_audio_ring_buffer_set_flushing (sink->ringbuffer, TRUE); in gst_audio_base_sink_change_state()
2488 gst_clock_set_master (sink->provided_clock, NULL); in gst_audio_base_sink_change_state()
2491 gst_audio_ring_buffer_activate (sink->ringbuffer, FALSE); in gst_audio_base_sink_change_state()
2492 gst_audio_ring_buffer_release (sink->ringbuffer); in gst_audio_base_sink_change_state()
2499 gst_audio_ring_buffer_activate (sink->ringbuffer, FALSE); in gst_audio_base_sink_change_state()
2500 gst_audio_ring_buffer_release (sink->ringbuffer); in gst_audio_base_sink_change_state()
2501 gst_audio_ring_buffer_close_device (sink->ringbuffer); in gst_audio_base_sink_change_state()
2502 GST_OBJECT_LOCK (sink); in gst_audio_base_sink_change_state()
2503 gst_object_unparent (GST_OBJECT_CAST (sink->ringbuffer)); in gst_audio_base_sink_change_state()
2504 sink->ringbuffer = NULL; in gst_audio_base_sink_change_state()
2505 GST_OBJECT_UNLOCK (sink); in gst_audio_base_sink_change_state()
2517 GST_DEBUG_OBJECT (sink, "create failed"); in gst_audio_base_sink_change_state()
2523 GST_DEBUG_OBJECT (sink, "open failed"); in gst_audio_base_sink_change_state()