123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363 |
- /* GStreamer
- * Copyright (C) <1999> Erik Walthinsen <omega@cse.ogi.edu>
- * Library <2001> Thomas Vander Stichele <thomas@apestaart.org>
- * <2011> Wim Taymans <wim.taymans@gmail.com>
- *
- * 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., 51 Franklin St, Fifth Floor,
- * Boston, MA 02110-1301, USA.
- */
- #ifndef __GST_AUDIO_AUDIO_H__
- #include <gst/audio/audio.h>
- #endif
- #ifndef __GST_AUDIO_FORMAT_H__
- #define __GST_AUDIO_FORMAT_H__
- G_BEGIN_DECLS
- #if G_BYTE_ORDER == G_BIG_ENDIAN
- #define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE
- #define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE
- #elif G_BYTE_ORDER == G_LITTLE_ENDIAN
- #define _GST_AUDIO_FORMAT_NE(fmt) GST_AUDIO_FORMAT_ ## fmt ## LE
- #define _GST_AUDIO_FORMAT_OE(fmt) GST_AUDIO_FORMAT_ ## fmt ## BE
- #endif
- /**
- * GstAudioFormat:
- * @GST_AUDIO_FORMAT_UNKNOWN: unknown or unset audio format
- * @GST_AUDIO_FORMAT_ENCODED: encoded audio format
- * @GST_AUDIO_FORMAT_S8: 8 bits in 8 bits, signed
- * @GST_AUDIO_FORMAT_U8: 8 bits in 8 bits, unsigned
- * @GST_AUDIO_FORMAT_S16LE: 16 bits in 16 bits, signed, little endian
- * @GST_AUDIO_FORMAT_S16BE: 16 bits in 16 bits, signed, big endian
- * @GST_AUDIO_FORMAT_U16LE: 16 bits in 16 bits, unsigned, little endian
- * @GST_AUDIO_FORMAT_U16BE: 16 bits in 16 bits, unsigned, big endian
- * @GST_AUDIO_FORMAT_S24_32LE: 24 bits in 32 bits, signed, little endian
- * @GST_AUDIO_FORMAT_S24_32BE: 24 bits in 32 bits, signed, big endian
- * @GST_AUDIO_FORMAT_U24_32LE: 24 bits in 32 bits, unsigned, little endian
- * @GST_AUDIO_FORMAT_U24_32BE: 24 bits in 32 bits, unsigned, big endian
- * @GST_AUDIO_FORMAT_S32LE: 32 bits in 32 bits, signed, little endian
- * @GST_AUDIO_FORMAT_S32BE: 32 bits in 32 bits, signed, big endian
- * @GST_AUDIO_FORMAT_U32LE: 32 bits in 32 bits, unsigned, little endian
- * @GST_AUDIO_FORMAT_U32BE: 32 bits in 32 bits, unsigned, big endian
- * @GST_AUDIO_FORMAT_S24LE: 24 bits in 24 bits, signed, little endian
- * @GST_AUDIO_FORMAT_S24BE: 24 bits in 24 bits, signed, big endian
- * @GST_AUDIO_FORMAT_U24LE: 24 bits in 24 bits, unsigned, little endian
- * @GST_AUDIO_FORMAT_U24BE: 24 bits in 24 bits, unsigned, big endian
- * @GST_AUDIO_FORMAT_S20LE: 20 bits in 24 bits, signed, little endian
- * @GST_AUDIO_FORMAT_S20BE: 20 bits in 24 bits, signed, big endian
- * @GST_AUDIO_FORMAT_U20LE: 20 bits in 24 bits, unsigned, little endian
- * @GST_AUDIO_FORMAT_U20BE: 20 bits in 24 bits, unsigned, big endian
- * @GST_AUDIO_FORMAT_S18LE: 18 bits in 24 bits, signed, little endian
- * @GST_AUDIO_FORMAT_S18BE: 18 bits in 24 bits, signed, big endian
- * @GST_AUDIO_FORMAT_U18LE: 18 bits in 24 bits, unsigned, little endian
- * @GST_AUDIO_FORMAT_U18BE: 18 bits in 24 bits, unsigned, big endian
- * @GST_AUDIO_FORMAT_F32LE: 32-bit floating point samples, little endian
- * @GST_AUDIO_FORMAT_F32BE: 32-bit floating point samples, big endian
- * @GST_AUDIO_FORMAT_F64LE: 64-bit floating point samples, little endian
- * @GST_AUDIO_FORMAT_F64BE: 64-bit floating point samples, big endian
- * @GST_AUDIO_FORMAT_S16: 16 bits in 16 bits, signed, native endianness
- * @GST_AUDIO_FORMAT_U16: 16 bits in 16 bits, unsigned, native endianness
- * @GST_AUDIO_FORMAT_S24_32: 24 bits in 32 bits, signed, native endianness
- * @GST_AUDIO_FORMAT_U24_32: 24 bits in 32 bits, unsigned, native endianness
- * @GST_AUDIO_FORMAT_S32: 32 bits in 32 bits, signed, native endianness
- * @GST_AUDIO_FORMAT_U32: 32 bits in 32 bits, unsigned, native endianness
- * @GST_AUDIO_FORMAT_S24: 24 bits in 24 bits, signed, native endianness
- * @GST_AUDIO_FORMAT_U24: 24 bits in 24 bits, unsigned, native endianness
- * @GST_AUDIO_FORMAT_S20: 20 bits in 24 bits, signed, native endianness
- * @GST_AUDIO_FORMAT_U20: 20 bits in 24 bits, unsigned, native endianness
- * @GST_AUDIO_FORMAT_S18: 18 bits in 24 bits, signed, native endianness
- * @GST_AUDIO_FORMAT_U18: 18 bits in 24 bits, unsigned, native endianness
- * @GST_AUDIO_FORMAT_F32: 32-bit floating point samples, native endianness
- * @GST_AUDIO_FORMAT_F64: 64-bit floating point samples, native endianness
- *
- * Enum value describing the most common audio formats.
- */
- typedef enum {
- GST_AUDIO_FORMAT_UNKNOWN,
- GST_AUDIO_FORMAT_ENCODED,
- /* 8 bit */
- GST_AUDIO_FORMAT_S8,
- GST_AUDIO_FORMAT_U8,
- /* 16 bit */
- GST_AUDIO_FORMAT_S16LE,
- GST_AUDIO_FORMAT_S16BE,
- GST_AUDIO_FORMAT_U16LE,
- GST_AUDIO_FORMAT_U16BE,
- /* 24 bit in low 3 bytes of 32 bits*/
- GST_AUDIO_FORMAT_S24_32LE,
- GST_AUDIO_FORMAT_S24_32BE,
- GST_AUDIO_FORMAT_U24_32LE,
- GST_AUDIO_FORMAT_U24_32BE,
- /* 32 bit */
- GST_AUDIO_FORMAT_S32LE,
- GST_AUDIO_FORMAT_S32BE,
- GST_AUDIO_FORMAT_U32LE,
- GST_AUDIO_FORMAT_U32BE,
- /* 24 bit in 3 bytes*/
- GST_AUDIO_FORMAT_S24LE,
- GST_AUDIO_FORMAT_S24BE,
- GST_AUDIO_FORMAT_U24LE,
- GST_AUDIO_FORMAT_U24BE,
- /* 20 bit in 3 bytes*/
- GST_AUDIO_FORMAT_S20LE,
- GST_AUDIO_FORMAT_S20BE,
- GST_AUDIO_FORMAT_U20LE,
- GST_AUDIO_FORMAT_U20BE,
- /* 18 bit in 3 bytes*/
- GST_AUDIO_FORMAT_S18LE,
- GST_AUDIO_FORMAT_S18BE,
- GST_AUDIO_FORMAT_U18LE,
- GST_AUDIO_FORMAT_U18BE,
- /* float */
- GST_AUDIO_FORMAT_F32LE,
- GST_AUDIO_FORMAT_F32BE,
- GST_AUDIO_FORMAT_F64LE,
- GST_AUDIO_FORMAT_F64BE,
- /* native endianness equivalents */
- GST_AUDIO_FORMAT_S16 = _GST_AUDIO_FORMAT_NE(S16),
- GST_AUDIO_FORMAT_U16 = _GST_AUDIO_FORMAT_NE(U16),
- GST_AUDIO_FORMAT_S24_32 = _GST_AUDIO_FORMAT_NE(S24_32),
- GST_AUDIO_FORMAT_U24_32 = _GST_AUDIO_FORMAT_NE(U24_32),
- GST_AUDIO_FORMAT_S32 = _GST_AUDIO_FORMAT_NE(S32),
- GST_AUDIO_FORMAT_U32 = _GST_AUDIO_FORMAT_NE(U32),
- GST_AUDIO_FORMAT_S24 = _GST_AUDIO_FORMAT_NE(S24),
- GST_AUDIO_FORMAT_U24 = _GST_AUDIO_FORMAT_NE(U24),
- GST_AUDIO_FORMAT_S20 = _GST_AUDIO_FORMAT_NE(S20),
- GST_AUDIO_FORMAT_U20 = _GST_AUDIO_FORMAT_NE(U20),
- GST_AUDIO_FORMAT_S18 = _GST_AUDIO_FORMAT_NE(S18),
- GST_AUDIO_FORMAT_U18 = _GST_AUDIO_FORMAT_NE(U18),
- GST_AUDIO_FORMAT_F32 = _GST_AUDIO_FORMAT_NE(F32),
- GST_AUDIO_FORMAT_F64 = _GST_AUDIO_FORMAT_NE(F64)
- } GstAudioFormat;
- typedef struct _GstAudioFormatInfo GstAudioFormatInfo;
- /**
- * GstAudioFormatFlags:
- * @GST_AUDIO_FORMAT_FLAG_INTEGER: integer samples
- * @GST_AUDIO_FORMAT_FLAG_FLOAT: float samples
- * @GST_AUDIO_FORMAT_FLAG_SIGNED: signed samples
- * @GST_AUDIO_FORMAT_FLAG_COMPLEX: complex layout
- * @GST_AUDIO_FORMAT_FLAG_UNPACK: the format can be used in
- * #GstAudioFormatUnpack and #GstAudioFormatPack functions
- *
- * The different audio flags that a format info can have.
- */
- typedef enum
- {
- GST_AUDIO_FORMAT_FLAG_INTEGER = (1 << 0),
- GST_AUDIO_FORMAT_FLAG_FLOAT = (1 << 1),
- GST_AUDIO_FORMAT_FLAG_SIGNED = (1 << 2),
- GST_AUDIO_FORMAT_FLAG_COMPLEX = (1 << 4),
- GST_AUDIO_FORMAT_FLAG_UNPACK = (1 << 5)
- } GstAudioFormatFlags;
- /**
- * GstAudioPackFlags:
- * @GST_AUDIO_PACK_FLAG_NONE: No flag
- * @GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE: When the source has a smaller depth
- * than the target format, set the least significant bits of the target
- * to 0. This is likely sightly faster but less accurate. When this flag
- * is not specified, the most significant bits of the source are duplicated
- * in the least significant bits of the destination.
- *
- * The different flags that can be used when packing and unpacking.
- */
- typedef enum
- {
- GST_AUDIO_PACK_FLAG_NONE = 0,
- GST_AUDIO_PACK_FLAG_TRUNCATE_RANGE = (1 << 0)
- } GstAudioPackFlags;
- /**
- * GstAudioFormatUnpack:
- * @info: a #GstAudioFormatInfo
- * @dest: (array) (element-type guint8): a destination array
- * @data: (array) (element-type guint8): pointer to the audio data
- * @length: the amount of samples to unpack.
- *
- * Unpacks @length samples from the given data of format @info.
- * The samples will be unpacked into @dest which each channel
- * interleaved. @dest should at least be big enough to hold @length *
- * channels * size(unpack_format) bytes.
- */
- typedef void (*GstAudioFormatUnpack) (const GstAudioFormatInfo *info,
- GstAudioPackFlags flags, gpointer dest,
- const gpointer data, gint length);
- /**
- * GstAudioFormatPack:
- * @info: a #GstAudioFormatInfo
- * @src: (array) (element-type guint8): a source array
- * @data: (array) (element-type guint8): pointer to the destination
- * data
- * @length: the amount of samples to pack.
- *
- * Packs @length samples from @src to the data array in format @info.
- * The samples from source have each channel interleaved
- * and will be packed into @data.
- */
- typedef void (*GstAudioFormatPack) (const GstAudioFormatInfo *info,
- GstAudioPackFlags flags, const gpointer src,
- gpointer data, gint length);
- /**
- * GstAudioFormatInfo:
- * @format: #GstAudioFormat
- * @name: string representation of the format
- * @description: user readable description of the format
- * @flags: #GstAudioFormatFlags
- * @endianness: the endianness
- * @width: amount of bits used for one sample
- * @depth: amount of valid bits in @width
- * @silence: @width/8 bytes with 1 silent sample
- * @unpack_format: the format of the unpacked samples
- * @unpack_func: function to unpack samples
- * @pack_func: function to pack samples
- *
- * Information for an audio format.
- */
- struct _GstAudioFormatInfo {
- GstAudioFormat format;
- const gchar *name;
- const gchar *description;
- GstAudioFormatFlags flags;
- gint endianness;
- gint width;
- gint depth;
- guint8 silence[8];
- GstAudioFormat unpack_format;
- GstAudioFormatUnpack unpack_func;
- GstAudioFormatPack pack_func;
- /*< private >*/
- gpointer _gst_reserved[GST_PADDING];
- };
- GType gst_audio_format_info_get_type (void);
- #define GST_AUDIO_FORMAT_INFO_FORMAT(info) ((info)->format)
- #define GST_AUDIO_FORMAT_INFO_NAME(info) ((info)->name)
- #define GST_AUDIO_FORMAT_INFO_FLAGS(info) ((info)->flags)
- #define GST_AUDIO_FORMAT_INFO_IS_INTEGER(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_INTEGER)
- #define GST_AUDIO_FORMAT_INFO_IS_FLOAT(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_FLOAT)
- #define GST_AUDIO_FORMAT_INFO_IS_SIGNED(info) !!((info)->flags & GST_AUDIO_FORMAT_FLAG_SIGNED)
- #define GST_AUDIO_FORMAT_INFO_ENDIANNESS(info) ((info)->endianness)
- #define GST_AUDIO_FORMAT_INFO_IS_LITTLE_ENDIAN(info) ((info)->endianness == G_LITTLE_ENDIAN)
- #define GST_AUDIO_FORMAT_INFO_IS_BIG_ENDIAN(info) ((info)->endianness == G_BIG_ENDIAN)
- #define GST_AUDIO_FORMAT_INFO_WIDTH(info) ((info)->width)
- #define GST_AUDIO_FORMAT_INFO_DEPTH(info) ((info)->depth)
- GstAudioFormat gst_audio_format_build_integer (gboolean sign, gint endianness,
- gint width, gint depth) G_GNUC_CONST;
- GstAudioFormat gst_audio_format_from_string (const gchar *format) G_GNUC_CONST;
- const gchar * gst_audio_format_to_string (GstAudioFormat format) G_GNUC_CONST;
- const GstAudioFormatInfo *
- gst_audio_format_get_info (GstAudioFormat format) G_GNUC_CONST;
- void gst_audio_format_fill_silence (const GstAudioFormatInfo *info,
- gpointer dest, gsize length);
- /**
- * GST_AUDIO_RATE_RANGE:
- *
- * Maximum range of allowed sample rates, for use in template caps strings.
- */
- #define GST_AUDIO_RATE_RANGE "(int) [ 1, max ]"
- /**
- * GST_AUDIO_CHANNELS_RANGE:
- *
- * Maximum range of allowed channels, for use in template caps strings.
- */
- #define GST_AUDIO_CHANNELS_RANGE "(int) [ 1, max ]"
- /**
- * GST_AUDIO_NE:
- * @s: format string without endianness marker
- *
- * Turns audio format string @s into the format string for native endianness.
- */
- /**
- * GST_AUDIO_OE:
- * @s: format string without endianness marker
- *
- * Turns audio format string @s into the format string for other endianness.
- */
- #if G_BYTE_ORDER == G_LITTLE_ENDIAN
- # define GST_AUDIO_NE(s) G_STRINGIFY(s)"LE"
- # define GST_AUDIO_OE(s) G_STRINGIFY(s)"BE"
- #else
- # define GST_AUDIO_NE(s) G_STRINGIFY(s)"BE"
- # define GST_AUDIO_OE(s) G_STRINGIFY(s)"LE"
- #endif
- /**
- * GST_AUDIO_FORMATS_ALL:
- *
- * List of all audio formats, for use in template caps strings.
- */
- #define GST_AUDIO_FORMATS_ALL " { S8, U8, " \
- "S16LE, S16BE, U16LE, U16BE, " \
- "S24_32LE, S24_32BE, U24_32LE, U24_32BE, " \
- "S32LE, S32BE, U32LE, U32BE, " \
- "S24LE, S24BE, U24LE, U24BE, " \
- "S20LE, S20BE, U20LE, U20BE, " \
- "S18LE, S18BE, U18LE, U18BE, " \
- "F32LE, F32BE, F64LE, F64BE }"
- /**
- * GST_AUDIO_CAPS_MAKE:
- * @format: string format that describes the sample layout, as string
- * (e.g. "S16LE", "S8", etc.)
- *
- * Generic caps string for audio, for use in pad templates.
- */
- #define GST_AUDIO_CAPS_MAKE(format) \
- "audio/x-raw, " \
- "format = (string) " format ", " \
- "rate = " GST_AUDIO_RATE_RANGE ", " \
- "channels = " GST_AUDIO_CHANNELS_RANGE
- /**
- * GST_AUDIO_DEF_RATE:
- *
- * Standard sampling rate used in consumer audio.
- */
- #define GST_AUDIO_DEF_RATE 44100
- /**
- * GST_AUDIO_DEF_CHANNELS:
- *
- * Standard number of channels used in consumer audio.
- */
- #define GST_AUDIO_DEF_CHANNELS 2
- /**
- * GST_AUDIO_DEF_FORMAT:
- *
- * Standard format used in consumer audio.
- */
- #define GST_AUDIO_DEF_FORMAT "S16LE"
- G_END_DECLS
- #endif /* __GST_AUDIO_FORMAT_H__ */
|