diff --git a/gst-libs/gst/audio/gstbaseaudioutils.c b/gst-libs/gst/audio/gstbaseaudioutils.c deleted file mode 100644 index 3f23590d14..0000000000 --- a/gst-libs/gst/audio/gstbaseaudioutils.c +++ /dev/null @@ -1,417 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#include "gstbaseaudioutils.h" - -#include -#include - -#include - -/** - * gst_base_audio_format_init: - * @info: (transfer none): a #GstAudioFormatInfo instance - * - * Initializes a #GstAudioFormatInfo instance for subsequent use. - * The instance must either have been previously cleared or set to 0 - * upon allocation. - */ -void -gst_base_audio_format_info_init (GstAudioFormatInfo * info) -{ - g_return_if_fail (info != NULL); - - /* no-op for now */ -} - -/** - * gst_base_audio_format_info_new: - * - * Allocate a new #GstAudioFormatInfo structure and initialize it using - * gst_base_audio_format_info(). - * - * Free-function: gst_base_audio_format_info_free - * - * Returns: (transfer full): a new #GstAudioFormatInfo, - * free with gst_base_audio_format_info_free(). - */ -GstAudioFormatInfo * -gst_base_audio_format_info_new (void) -{ - GstAudioFormatInfo *result; - - result = g_slice_new0 (GstAudioFormatInfo); - gst_base_audio_format_info_init (result); - - return result; -} - -/** - * gst_base_audio_format_clear: - * @info: (transfer none): a #GstAudioFormatInfo instance - * - * Clears a #GstAudioFormatInfo instance. - */ -void -gst_base_audio_format_info_clear (GstAudioFormatInfo * info) -{ - g_return_if_fail (info != NULL); - - g_free (info->channel_pos); - memset (info, 0, sizeof (*info)); -} - -/** - * gst_base_audio_format_copy: - * @info: (transfer none): a #GstAudioFormatInfo instance - * - * Create a copy of a given #GstAudioFormatInfo instance. - * - * Returns: (transfer full): a new #GstAudioFormatInfo, - * free with gst_base_audio_format_info_free() - */ -GstAudioFormatInfo * -gst_base_audio_format_info_copy (GstAudioFormatInfo * info) -{ - GstAudioFormatInfo *result = NULL; - - if (info) { - result = (GstAudioFormatInfo *) g_slice_copy (sizeof (GstAudioFormatInfo), - info); - } - return result; -} - -/** - * gst_base_audio_format_free: - * @info: (in) (transfer full): a #GstAudioFormatInfo instance - * - * Frees the allocated @info. - */ -void -gst_base_audio_format_info_free (GstAudioFormatInfo * info) -{ - g_slice_free (GstAudioFormatInfo, info); -} - -#define CHECK_VALUE(var, val) \ -G_STMT_START { \ - if (!res) \ - goto fail; \ - var = val; \ -} G_STMT_END - -/** - * gst_base_audio_parse_caps: - * @caps: a #GstCaps - * @state: a #GstAudioFormatInfo - * - * Parses audio format as represented by @caps into a more concise form - * as represented by @state. - * - * Returns: TRUE if parsing succeeded, otherwise FALSE - */ -gboolean -gst_base_audio_parse_caps (GstCaps * caps, GstAudioFormatInfo * info) -{ - gboolean res = TRUE; - GstStructure *s; - gboolean vb; - gint vi; - - g_return_val_if_fail (caps != NULL, FALSE); - g_return_val_if_fail (gst_caps_is_fixed (caps), FALSE); - - gst_base_audio_format_info_clear (info); - - s = gst_caps_get_structure (caps, 0); - if (gst_structure_has_name (s, "audio/x-raw-int")) - info->is_int = TRUE; - else if (gst_structure_has_name (s, "audio/x-raw-float")) - info->is_int = FALSE; - else - goto fail; - - res = gst_structure_get_int (s, "rate", &vi); - CHECK_VALUE (info->rate, vi); - res &= gst_structure_get_int (s, "channels", &vi); - CHECK_VALUE (info->channels, vi); - res &= gst_structure_get_int (s, "width", &vi); - CHECK_VALUE (info->width, vi); - res &= (!info->is_int || gst_structure_get_int (s, "depth", &vi)); - CHECK_VALUE (info->depth, vi); - res &= gst_structure_get_int (s, "endianness", &vi); - CHECK_VALUE (info->endian, vi); - res &= (!info->is_int || gst_structure_get_boolean (s, "signed", &vb)); - CHECK_VALUE (info->sign, vb); - - info->bpf = (info->width / 8) * info->channels; - GST_LOG ("bpf: %d", info->bpf); - if (!info->bpf) - goto fail; - - info->channel_pos = gst_audio_get_channel_positions (s); - - return res; - - /* ERRORS */ -fail: - { - /* there should not be caps out there that fail parsing ... */ - GST_WARNING ("failed to parse caps %" GST_PTR_FORMAT, caps); - return res; - } -} - -/** - * gst_base_audio_compare_format_info: - * @from: a #GstAudioFormatInfo - * @to: a #GstAudioFormatInfo - * - * Checks whether provides #GstAudioFormatInfo instances represent identical - * audio dat. - * - * Returns: TRUE if represent audio formats are identical - */ -gboolean -gst_base_audio_compare_format_info (GstAudioFormatInfo * from, - GstAudioFormatInfo * to) -{ - g_return_val_if_fail (from != NULL, FALSE); - g_return_val_if_fail (to != NULL, FALSE); - - /* this is a bit silly, so maybe should not need this function at all */ - return memcmp (from, to, sizeof (*from)); -} - -/** - * gst_base_audio_add_streamheader: - * @caps: a #GstCaps - * @buf: header buffers - * - * Adds given buffers to an array of buffers set as streamheader field - * on the given @caps. List of buffer arguments must be NULL-terminated. - * - * Returns: input caps with a streamheader field added, or NULL if some error - */ -GstCaps * -gst_base_audio_add_streamheader (GstCaps * caps, GstBuffer * buf, ...) -{ - GstStructure *structure = NULL; - va_list va; - GValue array = { 0 }; - GValue value = { 0 }; - - g_return_val_if_fail (caps != NULL, NULL); - g_return_val_if_fail (gst_caps_is_fixed (caps), NULL); - - caps = gst_caps_make_writable (caps); - structure = gst_caps_get_structure (caps, 0); - - g_value_init (&array, GST_TYPE_ARRAY); - - va_start (va, buf); - /* put buffers in a fixed list */ - while (buf) { - g_assert (gst_buffer_is_metadata_writable (buf)); - - /* mark buffer */ - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS); - - g_value_init (&value, GST_TYPE_BUFFER); - buf = gst_buffer_copy (buf); - GST_BUFFER_FLAG_SET (buf, GST_BUFFER_FLAG_IN_CAPS); - gst_value_set_buffer (&value, buf); - gst_buffer_unref (buf); - gst_value_array_append_value (&array, &value); - g_value_unset (&value); - - buf = va_arg (va, GstBuffer *); - } - - gst_structure_set_value (structure, "streamheader", &array); - g_value_unset (&array); - - return caps; -} - -/** - * gst_base_audio_encoded_audio_convert: - * @fmt: audio format of the encoded audio - * @bytes: number of encoded bytes - * @samples: number of encoded samples - * @src_format: source format - * @src_value: source value - * @dest_format: destination format - * @dest_value: destination format - * - * Helper function to convert @src_value in @src_format to @dest_value in - * @dest_format for encoded audio data. Conversion is possible between - * BYTE and TIME format by using estimated bitrate based on - * @samples and @bytes (and @fmt). - */ -gboolean -gst_base_audio_encoded_audio_convert (GstAudioFormatInfo * fmt, - gint64 bytes, gint64 samples, GstFormat src_format, - gint64 src_value, GstFormat * dest_format, gint64 * dest_value) -{ - gboolean res = FALSE; - - g_return_val_if_fail (dest_format != NULL, FALSE); - g_return_val_if_fail (dest_value != NULL, FALSE); - - if (G_UNLIKELY (src_format == *dest_format || src_value == 0 || - src_value == -1)) { - if (dest_value) - *dest_value = src_value; - return TRUE; - } - - if (samples == 0 || bytes == 0 || fmt->rate == 0) { - GST_DEBUG ("not enough metadata yet to convert"); - goto exit; - } - - bytes *= fmt->rate; - - switch (src_format) { - case GST_FORMAT_BYTES: - switch (*dest_format) { - case GST_FORMAT_TIME: - *dest_value = gst_util_uint64_scale (src_value, - GST_SECOND * samples, bytes); - res = TRUE; - break; - default: - res = FALSE; - } - break; - case GST_FORMAT_TIME: - switch (*dest_format) { - case GST_FORMAT_BYTES: - *dest_value = gst_util_uint64_scale (src_value, bytes, - samples * GST_SECOND); - res = TRUE; - break; - default: - res = FALSE; - } - break; - default: - res = FALSE; - } - -exit: - return res; -} - -/** - * gst_base_audio_raw_audio_convert: - * @fmt: audio format of the encoded audio - * @src_format: source format - * @src_value: source value - * @dest_format: destination format - * @dest_value: destination format - * - * Helper function to convert @src_value in @src_format to @dest_value in - * @dest_format for encoded audio data. Conversion is possible between - * BYTE, DEFAULT and TIME format based on audio characteristics provided - * by @fmt. - */ -gboolean -gst_base_audio_raw_audio_convert (GstAudioFormatInfo * fmt, - GstFormat src_format, gint64 src_value, - GstFormat * dest_format, gint64 * dest_value) -{ - gboolean res = FALSE; - guint scale = 1; - gint bytes_per_sample, rate, byterate; - - g_return_val_if_fail (dest_format != NULL, FALSE); - g_return_val_if_fail (dest_value != NULL, FALSE); - - if (G_UNLIKELY (src_format == *dest_format || src_value == 0 || - src_value == -1)) { - if (dest_value) - *dest_value = src_value; - return TRUE; - } - - bytes_per_sample = fmt->bpf; - rate = fmt->rate; - byterate = bytes_per_sample * rate; - - if (G_UNLIKELY (bytes_per_sample == 0 || rate == 0)) { - GST_DEBUG ("not enough metadata yet to convert"); - goto exit; - } - - switch (src_format) { - case GST_FORMAT_BYTES: - switch (*dest_format) { - case GST_FORMAT_DEFAULT: - *dest_value = src_value / bytes_per_sample; - res = TRUE; - break; - case GST_FORMAT_TIME: - *dest_value = - gst_util_uint64_scale_int (src_value, GST_SECOND, byterate); - res = TRUE; - break; - default: - res = FALSE; - } - break; - case GST_FORMAT_DEFAULT: - switch (*dest_format) { - case GST_FORMAT_BYTES: - *dest_value = src_value * bytes_per_sample; - res = TRUE; - break; - case GST_FORMAT_TIME: - *dest_value = gst_util_uint64_scale_int (src_value, GST_SECOND, rate); - res = TRUE; - break; - default: - res = FALSE; - } - break; - case GST_FORMAT_TIME: - switch (*dest_format) { - case GST_FORMAT_BYTES: - scale = bytes_per_sample; - /* fallthrough */ - case GST_FORMAT_DEFAULT: - *dest_value = gst_util_uint64_scale_int (src_value, - scale * rate, GST_SECOND); - res = TRUE; - break; - default: - res = FALSE; - } - break; - default: - res = FALSE; - } - -exit: - return res; -} diff --git a/gst-libs/gst/audio/gstbaseaudioutils.h b/gst-libs/gst/audio/gstbaseaudioutils.h deleted file mode 100644 index b31e722f32..0000000000 --- a/gst-libs/gst/audio/gstbaseaudioutils.h +++ /dev/null @@ -1,81 +0,0 @@ -/* GStreamer - * Copyright (C) 2011 Mark Nauwelaerts . - * Copyright (C) 2011 Nokia Corporation. All rights reserved. - * Contact: Stefan Kost - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Library General Public - * License as published by the Free Software Foundation; either - * version 2 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Library General Public License for more details. - * - * You should have received a copy of the GNU Library General Public - * License along with this library; if not, write to the - * Free Software Foundation, Inc., 59 Temple Place - Suite 330, - * Boston, MA 02111-1307, USA. - */ - -#ifndef _GST_BASE_AUDIO_UTILS_H_ -#define _GST_BASE_AUDIO_UTILS_H_ - -#ifndef GST_USE_UNSTABLE_API -#warning "Base audio utils provide unstable API and may change in future." -#warning "You can define GST_USE_UNSTABLE_API to avoid this warning." -#endif - -#include -#include - -G_BEGIN_DECLS - -/** - * GstAudioFormatInfo: - * @is_int: whether sample data is int or float - * @rate: rate of sample data - * @channels: number of channels in sample data - * @width: width (in bits) of sample data - * @depth: used bits in sample data (if integer) - * @sign: sign of sample data (if integer) - * @endian: endianness of sample data - * @bpf: bytes per audio frame - */ -typedef struct _GstAudioFormatInfo { - gboolean is_int; - gint rate; - gint channels; - gint width; - gint depth; - gboolean sign; - gint endian; - GstAudioChannelPosition *channel_pos; - - gint bpf; -} GstAudioFormatInfo; - -void gst_base_audio_format_info_init (GstAudioFormatInfo * info); -void gst_base_audio_format_info_clear (GstAudioFormatInfo * info); -GstAudioFormatInfo *gst_base_audio_format_info_new (void); -void gst_base_audio_format_info_free (GstAudioFormatInfo * info); -GstAudioFormatInfo *gst_base_audio_format_info_copy (GstAudioFormatInfo * info); - -gboolean gst_base_audio_parse_caps (GstCaps * caps, GstAudioFormatInfo * info); -gboolean gst_base_audio_compare_format_info (GstAudioFormatInfo * from, - GstAudioFormatInfo * to); - -GstCaps *gst_base_audio_add_streamheader (GstCaps * caps, GstBuffer * buf, ...); - -gboolean gst_base_audio_encoded_audio_convert (GstAudioFormatInfo * fmt, - gint64 bytes, gint64 samples, GstFormat src_format, - gint64 src_value, GstFormat * dest_format, gint64 * dest_value); - -gboolean gst_base_audio_raw_audio_convert (GstAudioFormatInfo * fmt, GstFormat src_format, - gint64 src_value, GstFormat * dest_format, gint64 * dest_value); - -G_END_DECLS - -#endif -