diff --git a/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiocdsrc.c b/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiocdsrc.c index 437bebb5dd..bf68e43818 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiocdsrc.c +++ b/subprojects/gst-plugins-base/gst-libs/gst/audio/gstaudiocdsrc.c @@ -98,6 +98,8 @@ #include "gstaudiocdsrc.h" #include +#include "gst/glib-compat-private.h" + GST_DEBUG_CATEGORY_STATIC (gst_audio_cd_src_debug); #define GST_CAT_DEFAULT gst_audio_cd_src_debug @@ -1575,7 +1577,7 @@ gst_audio_cd_src_start (GstBaseSrc * basesrc) * sort the data tracks to end and ignore them */ src->priv->num_all_tracks = src->priv->num_tracks; - g_qsort_with_data (src->priv->tracks, src->priv->num_tracks, + g_sort_array (src->priv->tracks, src->priv->num_tracks, sizeof (GstAudioCdSrcTrack), gst_audio_cd_src_track_sort_func, NULL); while (src->priv->num_tracks > 0 diff --git a/subprojects/gst-plugins-base/gst-libs/gst/glib-compat-private.h b/subprojects/gst-plugins-base/gst-libs/gst/glib-compat-private.h index c7472c59d8..0e433156d9 100644 --- a/subprojects/gst-plugins-base/gst-libs/gst/glib-compat-private.h +++ b/subprojects/gst-plugins-base/gst-libs/gst/glib-compat-private.h @@ -23,7 +23,6 @@ #ifndef __GLIB_COMPAT_PRIVATE_H__ #define __GLIB_COMPAT_PRIVATE_H__ -#if 0 #include G_BEGIN_DECLS @@ -32,7 +31,26 @@ G_BEGIN_DECLS /* adaptations */ -G_END_DECLS +#if !GLIB_CHECK_VERSION(2, 81, 1) +#define g_sort_array(a,n,s,f,udata) gst_g_sort_array(a,n,s,f,udata) + +// Don't need to maintain ABI compat here (n_elements), since we never pass +// the function as pointer but always call it directly ourselves. +static inline void +gst_g_sort_array (const void *array, + gssize n_elements, + size_t element_size, + GCompareDataFunc compare_func, + void *user_data) +{ + if (n_elements >= 0 && n_elements <= G_MAXINT) { + g_qsort_with_data (array, n_elements, element_size, compare_func, user_data); + } else { + g_abort (); + } +} #endif +G_END_DECLS + #endif diff --git a/subprojects/gst-plugins-base/gst/audiomixer/gstaudiointerleave.c b/subprojects/gst-plugins-base/gst/audiomixer/gstaudiointerleave.c index 321083b00a..ffb4fc5e2b 100644 --- a/subprojects/gst-plugins-base/gst/audiomixer/gstaudiointerleave.c +++ b/subprojects/gst-plugins-base/gst/audiomixer/gstaudiointerleave.c @@ -42,6 +42,8 @@ #include "gstaudiomixerelements.h" #include "gstaudiointerleave.h" +#include "gst/glib-compat-private.h" + #define GST_CAT_DEFAULT gst_audio_interleave_debug GST_DEBUG_CATEGORY_STATIC (GST_CAT_DEFAULT); @@ -313,7 +315,7 @@ gst_audio_interleave_channel_positions_to_mask (GValueArray * positions, for (i = 0; i < channels; i++) { default_ordering_map[i] = i; } - g_qsort_with_data (default_ordering_map, channels, + g_sort_array (default_ordering_map, channels, sizeof (*default_ordering_map), compare_positions, pos); ret = gst_audio_channel_positions_to_mask (pos, channels, FALSE, mask);