diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt
index 93cd6861d6..e4847dfd30 100644
--- a/docs/libs/gst-plugins-base-libs-sections.txt
+++ b/docs/libs/gst-plugins-base-libs-sections.txt
@@ -1994,6 +1994,7 @@ gst_pb_utils_get_codec_description
gst/pbutils/codec-utils.h
gst_codec_utils_aac_get_sample_rate_from_index
+gst_codec_utils_aac_get_index_from_sample_rate
gst_codec_utils_aac_get_profile
gst_codec_utils_aac_get_level
gst_codec_utils_aac_caps_set_level_and_profile
diff --git a/gst-libs/gst/pbutils/codec-utils.c b/gst-libs/gst/pbutils/codec-utils.c
index 1d2ba26264..a34b3bc5e1 100644
--- a/gst-libs/gst/pbutils/codec-utils.c
+++ b/gst-libs/gst/pbutils/codec-utils.c
@@ -45,6 +45,10 @@
#define GST_SIMPLE_CAPS_HAS_FIELD(caps,field) \
gst_structure_has_field(gst_caps_get_structure((caps),0),(field))
+static const guint aac_sample_rates[] = { 96000, 88200, 64000, 48000, 44100,
+ 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350
+};
+
static const gchar *
digit_to_string (guint digit)
{
@@ -71,10 +75,6 @@ digit_to_string (guint digit)
guint
gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx)
{
- static const guint aac_sample_rates[] = { 96000, 88200, 64000, 48000, 44100,
- 32000, 24000, 22050, 16000, 12000, 11025, 8000, 7350
- };
-
if (G_LIKELY (sr_idx < G_N_ELEMENTS (aac_sample_rates)))
return aac_sample_rates[sr_idx];
@@ -82,6 +82,28 @@ gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx)
return 0;
}
+/**
+ * gst_codec_utils_aac_get_index_from_sample_rate:
+ * @rate: Sample rate
+ *
+ * Translates the sample rate to the index corresponding to it in AAC spec.
+ *
+ * Returns: The AAC index for this sample rate, -1 if the rate is not a
+ * valid AAC sample rate.
+ */
+gint
+gst_codec_utils_aac_get_index_from_sample_rate (guint rate)
+{
+ guint n;
+
+ for (n = 0; n < G_N_ELEMENTS (aac_sample_rates); n++)
+ if (aac_sample_rates[n] == rate)
+ return n;
+
+ GST_WARNING ("Invalid sample rate %u", rate);
+ return -1;
+}
+
/**
* gst_codec_utils_aac_get_profile:
* @audio_config: a pointer to the AudioSpecificConfig as specified in the
diff --git a/gst-libs/gst/pbutils/codec-utils.h b/gst-libs/gst/pbutils/codec-utils.h
index d6a51cf5a1..bbbe7aa656 100644
--- a/gst-libs/gst/pbutils/codec-utils.h
+++ b/gst-libs/gst/pbutils/codec-utils.h
@@ -29,6 +29,7 @@ G_BEGIN_DECLS
/* AAC */
guint gst_codec_utils_aac_get_sample_rate_from_index (guint sr_idx);
+gint gst_codec_utils_aac_get_index_from_sample_rate (guint rate);
const gchar * gst_codec_utils_aac_get_profile (const guint8 * audio_config, guint len);
diff --git a/win32/common/libgstpbutils.def b/win32/common/libgstpbutils.def
index e9980acd18..aa37853cac 100644
--- a/win32/common/libgstpbutils.def
+++ b/win32/common/libgstpbutils.def
@@ -3,6 +3,7 @@ EXPORTS
gst_codec_utils_aac_get_level
gst_codec_utils_aac_get_profile
gst_codec_utils_aac_get_sample_rate_from_index
+ gst_codec_utils_aac_get_index_from_sample_rate
gst_codec_utils_h264_caps_set_level_and_profile
gst_codec_utils_h264_get_level
gst_codec_utils_h264_get_level_idc