mirror of
https://gitlab.freedesktop.org/pipewire/pipewire.git
synced 2025-12-30 11:08:55 -05:00
audio: make audio format an uri type
This commit is contained in:
parent
ff62c1b9ce
commit
03292fd80f
24 changed files with 608 additions and 364 deletions
60
spa/include/spa/audio/format-utils.h
Normal file
60
spa/include/spa/audio/format-utils.h
Normal file
|
|
@ -0,0 +1,60 @@
|
|||
/* Simple Plugin API
|
||||
* Copyright (C) 2016 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 __SPA_AUDIO_FORMAT_UTILS_H__
|
||||
#define __SPA_AUDIO_FORMAT_UTILS_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <spa/format-utils.h>
|
||||
#include <spa/audio/format.h>
|
||||
#include <spa/audio/raw-utils.h>
|
||||
|
||||
typedef struct {
|
||||
uint32_t format;
|
||||
uint32_t flags;
|
||||
uint32_t layout;
|
||||
uint32_t rate;
|
||||
uint32_t channels;
|
||||
uint32_t channel_mask;
|
||||
} SpaPropAudio;
|
||||
|
||||
static inline void
|
||||
spa_prop_audio_map (SpaIDMap *map, SpaPropAudio *types)
|
||||
{
|
||||
if (types->format == 0) {
|
||||
types->format = spa_id_map_get_id (map, SPA_PROP_AUDIO__format);
|
||||
types->flags = spa_id_map_get_id (map, SPA_PROP_AUDIO__flags);
|
||||
types->layout = spa_id_map_get_id (map, SPA_PROP_AUDIO__layout);
|
||||
types->rate = spa_id_map_get_id (map, SPA_PROP_AUDIO__rate);
|
||||
types->channels = spa_id_map_get_id (map, SPA_PROP_AUDIO__channels);
|
||||
types->channel_mask = spa_id_map_get_id (map, SPA_PROP_AUDIO__channelMask);
|
||||
}
|
||||
}
|
||||
|
||||
SpaResult spa_format_audio_parse (const SpaFormat *format,
|
||||
SpaAudioInfo *info);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* __SPA_AUDIO_FORMAT_UTILS */
|
||||
|
|
@ -24,7 +24,7 @@
|
|||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <spa/format-utils.h>
|
||||
#include <spa/format.h>
|
||||
#include <spa/audio/raw.h>
|
||||
|
||||
typedef struct _SpaAudioInfo SpaAudioInfo;
|
||||
|
|
@ -39,28 +39,6 @@ typedef struct _SpaAudioInfo SpaAudioInfo;
|
|||
#define SPA_PROP_AUDIO__channels SPA_PROP_AUDIO_PREFIX "channels"
|
||||
#define SPA_PROP_AUDIO__channelMask SPA_PROP_AUDIO_PREFIX "channel-mask"
|
||||
|
||||
typedef struct {
|
||||
uint32_t format;
|
||||
uint32_t flags;
|
||||
uint32_t layout;
|
||||
uint32_t rate;
|
||||
uint32_t channels;
|
||||
uint32_t channel_mask;
|
||||
} SpaPropAudio;
|
||||
|
||||
static inline void
|
||||
spa_prop_audio_map (SpaIDMap *map, SpaPropAudio *types)
|
||||
{
|
||||
if (types->format == 0) {
|
||||
types->format = spa_id_map_get_id (map, SPA_PROP_AUDIO__format);
|
||||
types->flags = spa_id_map_get_id (map, SPA_PROP_AUDIO__flags);
|
||||
types->layout = spa_id_map_get_id (map, SPA_PROP_AUDIO__layout);
|
||||
types->rate = spa_id_map_get_id (map, SPA_PROP_AUDIO__rate);
|
||||
types->channels = spa_id_map_get_id (map, SPA_PROP_AUDIO__channels);
|
||||
types->channel_mask = spa_id_map_get_id (map, SPA_PROP_AUDIO__channelMask);
|
||||
}
|
||||
}
|
||||
|
||||
struct _SpaAudioInfo {
|
||||
uint32_t media_type;
|
||||
uint32_t media_subtype;
|
||||
|
|
@ -69,9 +47,6 @@ struct _SpaAudioInfo {
|
|||
} info;
|
||||
};
|
||||
|
||||
SpaResult spa_format_audio_parse (const SpaFormat *format,
|
||||
SpaAudioInfo *info);
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
|
|
|||
119
spa/include/spa/audio/raw-utils.h
Normal file
119
spa/include/spa/audio/raw-utils.h
Normal file
|
|
@ -0,0 +1,119 @@
|
|||
/* Simple Plugin API
|
||||
* Copyright (C) 2016 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 __SPA_AUDIO_RAW_UTILS_H__
|
||||
#define __SPA_AUDIO_RAW_UTILS_H__
|
||||
|
||||
#ifdef __cplusplus
|
||||
extern "C" {
|
||||
#endif
|
||||
|
||||
#include <spa/id-map.h>
|
||||
#include <spa/audio/raw.h>
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "BE"
|
||||
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "LE"
|
||||
#elif __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "LE"
|
||||
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_PREFIX fmt "BE"
|
||||
#endif
|
||||
|
||||
typedef struct {
|
||||
uint32_t UNKNOWN;
|
||||
uint32_t ENCODED;
|
||||
uint32_t S8;
|
||||
uint32_t U8;
|
||||
uint32_t S16;
|
||||
uint32_t U16;
|
||||
uint32_t S24_32;
|
||||
uint32_t U24_32;
|
||||
uint32_t S32;
|
||||
uint32_t U32;
|
||||
uint32_t S24;
|
||||
uint32_t U24;
|
||||
uint32_t S20;
|
||||
uint32_t U20;
|
||||
uint32_t S18;
|
||||
uint32_t U18;
|
||||
uint32_t F32;
|
||||
uint32_t F64;
|
||||
uint32_t S16_OE;
|
||||
uint32_t U16_OE;
|
||||
uint32_t S24_32_OE;
|
||||
uint32_t U24_32_OE;
|
||||
uint32_t S32_OE;
|
||||
uint32_t U32_OE;
|
||||
uint32_t S24_OE;
|
||||
uint32_t U24_OE;
|
||||
uint32_t S20_OE;
|
||||
uint32_t U20_OE;
|
||||
uint32_t S18_OE;
|
||||
uint32_t U18_OE;
|
||||
uint32_t F32_OE;
|
||||
uint32_t F64_OE;
|
||||
} SpaAudioFormats;
|
||||
|
||||
static inline void
|
||||
spa_audio_formats_map (SpaIDMap *map, SpaAudioFormats *types)
|
||||
{
|
||||
if (types->ENCODED == 0) {
|
||||
types->UNKNOWN = 0;
|
||||
types->ENCODED = spa_id_map_get_id (map, SPA_AUDIO_FORMAT__ENCODED);
|
||||
|
||||
types->S8 = spa_id_map_get_id (map, SPA_AUDIO_FORMAT__S8);
|
||||
types->U8 = spa_id_map_get_id (map, SPA_AUDIO_FORMAT__U8);
|
||||
|
||||
types->S16 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S16"));
|
||||
types->U16 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U16"));
|
||||
types->S24_32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S24_32"));
|
||||
types->U24_32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U24_32"));
|
||||
types->S32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S32"));
|
||||
types->U32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U32"));
|
||||
types->S24 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S24"));
|
||||
types->U24 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U24"));
|
||||
types->S20 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S20"));
|
||||
types->U20 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U20"));
|
||||
types->S18 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("S18"));
|
||||
types->U18 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("U18"));
|
||||
types->F32 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("F32"));
|
||||
types->F64 = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_NE ("F64"));
|
||||
|
||||
types->S16_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S16"));
|
||||
types->U16_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U16"));
|
||||
types->S24_32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S24_32"));
|
||||
types->U24_32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U24_32"));
|
||||
types->S32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S32"));
|
||||
types->U32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U32"));
|
||||
types->S24_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S24"));
|
||||
types->U24_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U24"));
|
||||
types->S20_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S20"));
|
||||
types->U20_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U20"));
|
||||
types->S18_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("S18"));
|
||||
types->U18_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("U18"));
|
||||
types->F32_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("F32"));
|
||||
types->F64_OE = spa_id_map_get_id (map, _SPA_AUDIO_FORMAT_OE ("F64"));
|
||||
}
|
||||
}
|
||||
|
||||
#ifdef __cplusplus
|
||||
} /* extern "C" */
|
||||
#endif
|
||||
|
||||
#endif /* __SPA_AUDIO_RAW_UTILS_H__ */
|
||||
|
|
@ -28,72 +28,41 @@ typedef struct _SpaAudioInfoRaw SpaAudioInfoRaw;
|
|||
|
||||
#include <endian.h>
|
||||
|
||||
#if __BYTE_ORDER == __BIG_ENDIAN
|
||||
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## BE
|
||||
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## LE
|
||||
#elif __BYTE_ORDER == __LITTLE_ENDIAN
|
||||
#define _SPA_AUDIO_FORMAT_NE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## LE
|
||||
#define _SPA_AUDIO_FORMAT_OE(fmt) SPA_AUDIO_FORMAT_ ## fmt ## BE
|
||||
#endif
|
||||
|
||||
typedef enum {
|
||||
SPA_AUDIO_FORMAT_UNKNOWN,
|
||||
SPA_AUDIO_FORMAT_ENCODED,
|
||||
/* 8 bit */
|
||||
SPA_AUDIO_FORMAT_S8,
|
||||
SPA_AUDIO_FORMAT_U8,
|
||||
/* 16 bit */
|
||||
SPA_AUDIO_FORMAT_S16LE,
|
||||
SPA_AUDIO_FORMAT_S16BE,
|
||||
SPA_AUDIO_FORMAT_U16LE,
|
||||
SPA_AUDIO_FORMAT_U16BE,
|
||||
/* 24 bit in low 3 bytes of 32 bits*/
|
||||
SPA_AUDIO_FORMAT_S24_32LE,
|
||||
SPA_AUDIO_FORMAT_S24_32BE,
|
||||
SPA_AUDIO_FORMAT_U24_32LE,
|
||||
SPA_AUDIO_FORMAT_U24_32BE,
|
||||
/* 32 bit */
|
||||
SPA_AUDIO_FORMAT_S32LE,
|
||||
SPA_AUDIO_FORMAT_S32BE,
|
||||
SPA_AUDIO_FORMAT_U32LE,
|
||||
SPA_AUDIO_FORMAT_U32BE,
|
||||
/* 24 bit in 3 bytes*/
|
||||
SPA_AUDIO_FORMAT_S24LE,
|
||||
SPA_AUDIO_FORMAT_S24BE,
|
||||
SPA_AUDIO_FORMAT_U24LE,
|
||||
SPA_AUDIO_FORMAT_U24BE,
|
||||
/* 20 bit in 3 bytes*/
|
||||
SPA_AUDIO_FORMAT_S20LE,
|
||||
SPA_AUDIO_FORMAT_S20BE,
|
||||
SPA_AUDIO_FORMAT_U20LE,
|
||||
SPA_AUDIO_FORMAT_U20BE,
|
||||
/* 18 bit in 3 bytes*/
|
||||
SPA_AUDIO_FORMAT_S18LE,
|
||||
SPA_AUDIO_FORMAT_S18BE,
|
||||
SPA_AUDIO_FORMAT_U18LE,
|
||||
SPA_AUDIO_FORMAT_U18BE,
|
||||
/* float */
|
||||
SPA_AUDIO_FORMAT_F32LE,
|
||||
SPA_AUDIO_FORMAT_F32BE,
|
||||
SPA_AUDIO_FORMAT_F64LE,
|
||||
SPA_AUDIO_FORMAT_F64BE,
|
||||
/* native endianness equivalents */
|
||||
SPA_AUDIO_FORMAT_S16 = _SPA_AUDIO_FORMAT_NE(S16),
|
||||
SPA_AUDIO_FORMAT_U16 = _SPA_AUDIO_FORMAT_NE(U16),
|
||||
SPA_AUDIO_FORMAT_S24_32 = _SPA_AUDIO_FORMAT_NE(S24_32),
|
||||
SPA_AUDIO_FORMAT_U24_32 = _SPA_AUDIO_FORMAT_NE(U24_32),
|
||||
SPA_AUDIO_FORMAT_S32 = _SPA_AUDIO_FORMAT_NE(S32),
|
||||
SPA_AUDIO_FORMAT_U32 = _SPA_AUDIO_FORMAT_NE(U32),
|
||||
SPA_AUDIO_FORMAT_S24 = _SPA_AUDIO_FORMAT_NE(S24),
|
||||
SPA_AUDIO_FORMAT_U24 = _SPA_AUDIO_FORMAT_NE(U24),
|
||||
SPA_AUDIO_FORMAT_S20 = _SPA_AUDIO_FORMAT_NE(S20),
|
||||
SPA_AUDIO_FORMAT_U20 = _SPA_AUDIO_FORMAT_NE(U20),
|
||||
SPA_AUDIO_FORMAT_S18 = _SPA_AUDIO_FORMAT_NE(S18),
|
||||
SPA_AUDIO_FORMAT_U18 = _SPA_AUDIO_FORMAT_NE(U18),
|
||||
SPA_AUDIO_FORMAT_F32 = _SPA_AUDIO_FORMAT_NE(F32),
|
||||
SPA_AUDIO_FORMAT_F64 = _SPA_AUDIO_FORMAT_NE(F64)
|
||||
} SpaAudioFormat;
|
||||
#define SPA_AUDIO_FORMAT_URI "http://spaplug.in/ns/audio-format"
|
||||
#define SPA_AUDIO_FORMAT_PREFIX SPA_AUDIO_FORMAT_URI "#"
|
||||
|
||||
#define SPA_AUDIO_FORMAT__UNKNOWN SPA_AUDIO_FORMAT_PREFIX "UNKNOWN"
|
||||
#define SPA_AUDIO_FORMAT__ENCODED SPA_AUDIO_FORMAT_PREFIX "ENCODED"
|
||||
#define SPA_AUDIO_FORMAT__S8 SPA_AUDIO_FORMAT_PREFIX "S8"
|
||||
#define SPA_AUDIO_FORMAT__U8 SPA_AUDIO_FORMAT_PREFIX "U8"
|
||||
#define SPA_AUDIO_FORMAT__S16LE SPA_AUDIO_FORMAT_PREFIX "S16LE"
|
||||
#define SPA_AUDIO_FORMAT__S16BE SPA_AUDIO_FORMAT_PREFIX "S16BE"
|
||||
#define SPA_AUDIO_FORMAT__U16LE SPA_AUDIO_FORMAT_PREFIX "U16LE"
|
||||
#define SPA_AUDIO_FORMAT__U16BE SPA_AUDIO_FORMAT_PREFIX "U16BE"
|
||||
#define SPA_AUDIO_FORMAT__S24_32LE SPA_AUDIO_FORMAT_PREFIX "S24_32LE"
|
||||
#define SPA_AUDIO_FORMAT__S24_32BE SPA_AUDIO_FORMAT_PREFIX "S24_32BE"
|
||||
#define SPA_AUDIO_FORMAT__U24_32LE SPA_AUDIO_FORMAT_PREFIX "U24_32LE"
|
||||
#define SPA_AUDIO_FORMAT__U24_32BE SPA_AUDIO_FORMAT_PREFIX "U24_32BE"
|
||||
#define SPA_AUDIO_FORMAT__S32LE SPA_AUDIO_FORMAT_PREFIX "S32LE"
|
||||
#define SPA_AUDIO_FORMAT__S32BE SPA_AUDIO_FORMAT_PREFIX "S32BE"
|
||||
#define SPA_AUDIO_FORMAT__U32LE SPA_AUDIO_FORMAT_PREFIX "U32LE"
|
||||
#define SPA_AUDIO_FORMAT__U32BE SPA_AUDIO_FORMAT_PREFIX "U32BE"
|
||||
#define SPA_AUDIO_FORMAT__S24LE SPA_AUDIO_FORMAT_PREFIX "S24LE"
|
||||
#define SPA_AUDIO_FORMAT__S24BE SPA_AUDIO_FORMAT_PREFIX "S24BE"
|
||||
#define SPA_AUDIO_FORMAT__U24LE SPA_AUDIO_FORMAT_PREFIX "U24LE"
|
||||
#define SPA_AUDIO_FORMAT__U24BE SPA_AUDIO_FORMAT_PREFIX "U24BE"
|
||||
#define SPA_AUDIO_FORMAT__S20LE SPA_AUDIO_FORMAT_PREFIX "S20LE"
|
||||
#define SPA_AUDIO_FORMAT__S20BE SPA_AUDIO_FORMAT_PREFIX "S20BE"
|
||||
#define SPA_AUDIO_FORMAT__U20LE SPA_AUDIO_FORMAT_PREFIX "U20LE"
|
||||
#define SPA_AUDIO_FORMAT__U20BE SPA_AUDIO_FORMAT_PREFIX "U20BE"
|
||||
#define SPA_AUDIO_FORMAT__S18LE SPA_AUDIO_FORMAT_PREFIX "S18LE"
|
||||
#define SPA_AUDIO_FORMAT__S18BE SPA_AUDIO_FORMAT_PREFIX "S18BE"
|
||||
#define SPA_AUDIO_FORMAT__U18LE SPA_AUDIO_FORMAT_PREFIX "U18LE"
|
||||
#define SPA_AUDIO_FORMAT__U18BE SPA_AUDIO_FORMAT_PREFIX "U18BE"
|
||||
#define SPA_AUDIO_FORMAT__F32LE SPA_AUDIO_FORMAT_PREFIX "F32LE"
|
||||
#define SPA_AUDIO_FORMAT__F32BE SPA_AUDIO_FORMAT_PREFIX "F32BE"
|
||||
#define SPA_AUDIO_FORMAT__F64LE SPA_AUDIO_FORMAT_PREFIX "F64LE"
|
||||
#define SPA_AUDIO_FORMAT__F64BE SPA_AUDIO_FORMAT_PREFIX "F64BE"
|
||||
|
||||
/**
|
||||
* SpaAudioFlags:
|
||||
|
|
@ -130,7 +99,7 @@ typedef enum {
|
|||
* @channel_mask: the channel mask
|
||||
*/
|
||||
struct _SpaAudioInfoRaw {
|
||||
SpaAudioFormat format;
|
||||
uint32_t format;
|
||||
SpaAudioFlags flags;
|
||||
SpaAudioLayout layout;
|
||||
uint32_t rate;
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue