summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMathieu Duponchelle <mathieu@centricular.com>2018-02-15 20:00:42 +0100
committerMathieu Duponchelle <mathieu@centricular.com>2018-02-15 20:51:30 +0100
commit9cf4293bde083685999820f1dee8ac908701df27 (patch)
tree020ac4d21bfddcc8f9c9be5823532dbb1bad01ca
parent6a4a82f35500614fb876886c9d1606dac3783169 (diff)
audio-converter: add a convenience conversion method
This is useful from python bindings https://bugzilla.gnome.org/show_bug.cgi?id=793492
-rw-r--r--docs/libs/gst-plugins-base-libs-sections.txt1
-rw-r--r--gst-libs/gst/audio/audio-converter.c35
-rw-r--r--gst-libs/gst/audio/audio-converter.h6
3 files changed, 42 insertions, 0 deletions
diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt
index 57222fb56..53d0b0094 100644
--- a/docs/libs/gst-plugins-base-libs-sections.txt
+++ b/docs/libs/gst-plugins-base-libs-sections.txt
@@ -658,6 +658,7 @@ GstAudioConverterFlags
gst_audio_converter_new
gst_audio_converter_free
gst_audio_converter_samples
+gst_audio_converter_convert
gst_audio_converter_get_in_frames
gst_audio_converter_get_max_latency
gst_audio_converter_get_out_frames
diff --git a/gst-libs/gst/audio/audio-converter.c b/gst-libs/gst/audio/audio-converter.c
index 2cf63c13b..b56743c6b 100644
--- a/gst-libs/gst/audio/audio-converter.c
+++ b/gst-libs/gst/audio/audio-converter.c
@@ -1448,6 +1448,41 @@ gst_audio_converter_samples (GstAudioConverter * convert,
}
/**
+ * gst_audio_converter_convert:
+ * @flags: extra #GstAudioConverterFlags
+ * @in: (array length=in_size) (element-type guint8): input data
+ * @in_size: size of @in
+ * @out: (out) (array length=out_size) (element-type guint8): a pointer where
+ * the output data will be written
+ * @out_size: (out): a pointer where the size of @out will be written
+ *
+ * Convenience wrapper around gst_audio_converter_samples(), which will
+ * perform allocation of the output buffer based on the result from
+ * gst_audio_converter_get_out_frames().
+ *
+ * Returns: %TRUE is the conversion could be performed.
+ *
+ * Since: 1.14
+ */
+gboolean
+gst_audio_converter_convert (GstAudioConverter * convert,
+ GstAudioConverterFlags flags, gpointer in, gsize in_size,
+ gpointer * out, gsize * out_size)
+{
+ g_return_val_if_fail (convert != NULL, FALSE);
+ g_return_val_if_fail (flags ^ GST_AUDIO_CONVERTER_FLAG_IN_WRITABLE, FALSE);
+
+ gsize in_frames = in_size / convert->in.bpf;
+ gsize out_frames = gst_audio_converter_get_out_frames (convert, in_frames);
+
+ *out_size = out_frames * convert->out.bpf;
+ *out = g_malloc0 (*out_size);
+
+ return gst_audio_converter_samples (convert, flags, &in, in_frames, out,
+ out_frames);
+}
+
+/**
* gst_audio_converter_supports_inplace:
* @convert: a #GstAudioConverter
*
diff --git a/gst-libs/gst/audio/audio-converter.h b/gst-libs/gst/audio/audio-converter.h
index 4d93b0b3b..e04bcad06 100644
--- a/gst-libs/gst/audio/audio-converter.h
+++ b/gst-libs/gst/audio/audio-converter.h
@@ -159,6 +159,12 @@ gboolean gst_audio_converter_samples (GstAudioConverter * co
GST_EXPORT
gboolean gst_audio_converter_supports_inplace (GstAudioConverter *convert);
+GST_EXPORT
+gboolean gst_audio_converter_convert (GstAudioConverter * convert,
+ GstAudioConverterFlags flags,
+ gpointer in, gsize in_size,
+ gpointer *out, gsize *out_size);
+
G_END_DECLS
#endif /* __GST_AUDIO_CONVERTER_H__ */