diff --git a/docs/libs/gst-plugins-base-libs-sections.txt b/docs/libs/gst-plugins-base-libs-sections.txt index 57222fb56e10c582476cfb42b90d5555fb49967f..53d0b0094ba9316e84bcafd1735553526bda0f30 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 2cf63c13b6d15e170d2c35ffc20096cff5522a79..b56743c6be13b29509105ce5e39062e81248ce04 100644 --- a/gst-libs/gst/audio/audio-converter.c +++ b/gst-libs/gst/audio/audio-converter.c @@ -1447,6 +1447,41 @@ gst_audio_converter_samples (GstAudioConverter * convert, return convert->convert (convert, flags, in, in_frames, out, out_frames); } +/** + * 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 4d93b0b3b005cd2171020054074d3f7ab9ddf480..e04bcad069ae8f541934b9735925eca04c53789a 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__ */