codec-utils: add a gst_codec_utils_aac_get_index_from_sample_rate
authorVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Thu, 25 Jul 2013 19:03:50 +0000 (20:03 +0100)
committerVincent Penquerc'h <vincent.penquerch@collabora.co.uk>
Fri, 26 Jul 2013 08:24:50 +0000 (09:24 +0100)
It maps a sample rate to a well known AAC sample rate index.

docs/libs/gst-plugins-base-libs-sections.txt
gst-libs/gst/pbutils/codec-utils.c
gst-libs/gst/pbutils/codec-utils.h
win32/common/libgstpbutils.def

index 93cd6861d6223152bec677e6ddd4b5f0d168f197..e4847dfd303ef70d3edfc4d8019628ae6bdf3652 100644 (file)
@@ -1994,6 +1994,7 @@ gst_pb_utils_get_codec_description
 <INCLUDE>gst/pbutils/codec-utils.h</INCLUDE>
 <SUBSECTION>
 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
index 1d2ba2626477c48071cd9b13fa27930fb63b6627..a34b3bc5e188353962335cb24232ecae34ddf4fc 100644 (file)
 #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
index d6a51cf5a10efe48cece99e86a5ed08c61eefd56..bbbe7aa656f3fcb7b0124c57fc3a6cdb6592bcd0 100644 (file)
@@ -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);
 
index e9980acd18a4388ef17eb13a2719498c60f84682..aa37853cac94345cd588803224de9d416928d56e 100644 (file)
@@ -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