audioconvert: add more format support

Add support to endian conversion as well.
This commit is contained in:
Wim Taymans 2021-08-17 15:03:03 +02:00
parent a5e2e955d2
commit fd82da938a
4 changed files with 25 additions and 8 deletions

View file

@ -60,13 +60,13 @@
#define S32_SCALE 2147483648.0f #define S32_SCALE 2147483648.0f
#define S32_MIN 2147483520.0f #define S32_MIN 2147483520.0f
#define S32_TO_F32(v) S24_TO_F32((v) >> 8) #define S32_TO_F32(v) S24_TO_F32(((int32_t)(v)) >> 8)
#define S32S_TO_F32(v) bswap_32(S24_TO_F32((v) >> 8)) #define S32S_TO_F32(v) S24_TO_F32(((int32_t)bswap_32(v)) >> 8)
#define F32_TO_S32(v) (F32_TO_S24(v) << 8) #define F32_TO_S32(v) (F32_TO_S24(v) << 8)
#define F32_TO_S32S(v) bswap_32((F32_TO_S24(v) << 8)) #define F32_TO_S32S(v) bswap_32((F32_TO_S24(v) << 8))
#define S24_32_TO_F32(v) S32_TO_F32((v)<<8) #define S24_32_TO_F32(v) S32_TO_F32((v)<<8)
#define S24_32S_TO_F32(v) bswap_32(S32_TO_F32((v)<<8)) #define S24_32S_TO_F32(v) S32_TO_F32(((int32_t)bswap_32(v))<<8)
#define F32_TO_S24_32(v) F32_TO_S24(v) #define F32_TO_S24_32(v) F32_TO_S24(v)
#define F32_TO_S24_32S(v) bswap_32(F32_TO_S24(v)) #define F32_TO_S24_32S(v) bswap_32(F32_TO_S24(v))

View file

@ -398,19 +398,23 @@ static int port_enum_formats(void *object,
info.info.raw.format == SPA_AUDIO_FORMAT_F32P || info.info.raw.format == SPA_AUDIO_FORMAT_F32P ||
info.info.raw.format == SPA_AUDIO_FORMAT_F32) { info.info.raw.format == SPA_AUDIO_FORMAT_F32) {
spa_pod_builder_add(builder, spa_pod_builder_add(builder,
SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(16, SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(20,
info.info.raw.format, info.info.raw.format,
SPA_AUDIO_FORMAT_F32P, SPA_AUDIO_FORMAT_F32P,
SPA_AUDIO_FORMAT_F32, SPA_AUDIO_FORMAT_F32,
SPA_AUDIO_FORMAT_F32_OE,
SPA_AUDIO_FORMAT_S32P, SPA_AUDIO_FORMAT_S32P,
SPA_AUDIO_FORMAT_S32, SPA_AUDIO_FORMAT_S32,
SPA_AUDIO_FORMAT_S32_OE,
SPA_AUDIO_FORMAT_S24_32P, SPA_AUDIO_FORMAT_S24_32P,
SPA_AUDIO_FORMAT_S24_32, SPA_AUDIO_FORMAT_S24_32,
SPA_AUDIO_FORMAT_S24_32_OE,
SPA_AUDIO_FORMAT_S24P, SPA_AUDIO_FORMAT_S24P,
SPA_AUDIO_FORMAT_S24, SPA_AUDIO_FORMAT_S24,
SPA_AUDIO_FORMAT_S24_OE, SPA_AUDIO_FORMAT_S24_OE,
SPA_AUDIO_FORMAT_S16P, SPA_AUDIO_FORMAT_S16P,
SPA_AUDIO_FORMAT_S16, SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S16_OE,
SPA_AUDIO_FORMAT_S8P, SPA_AUDIO_FORMAT_S8P,
SPA_AUDIO_FORMAT_S8, SPA_AUDIO_FORMAT_S8,
SPA_AUDIO_FORMAT_U8P, SPA_AUDIO_FORMAT_U8P,
@ -418,11 +422,12 @@ static int port_enum_formats(void *object,
0); 0);
} else { } else {
spa_pod_builder_add(builder, spa_pod_builder_add(builder,
SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(4, SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(5,
info.info.raw.format, info.info.raw.format,
info.info.raw.format, info.info.raw.format,
SPA_AUDIO_FORMAT_F32, SPA_AUDIO_FORMAT_F32,
SPA_AUDIO_FORMAT_F32P), SPA_AUDIO_FORMAT_F32P,
SPA_AUDIO_FORMAT_F32_OE),
0); 0);
} }
if (other->have_format) { if (other->have_format) {

View file

@ -691,19 +691,23 @@ static int port_enum_formats(void *object,
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat, SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio), SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio),
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(16, SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(20,
SPA_AUDIO_FORMAT_F32P, SPA_AUDIO_FORMAT_F32P,
SPA_AUDIO_FORMAT_F32P, SPA_AUDIO_FORMAT_F32P,
SPA_AUDIO_FORMAT_F32, SPA_AUDIO_FORMAT_F32,
SPA_AUDIO_FORMAT_F32_OE,
SPA_AUDIO_FORMAT_S32P, SPA_AUDIO_FORMAT_S32P,
SPA_AUDIO_FORMAT_S32, SPA_AUDIO_FORMAT_S32,
SPA_AUDIO_FORMAT_S32_OE,
SPA_AUDIO_FORMAT_S24_32P, SPA_AUDIO_FORMAT_S24_32P,
SPA_AUDIO_FORMAT_S24_32, SPA_AUDIO_FORMAT_S24_32,
SPA_AUDIO_FORMAT_S24_32_OE,
SPA_AUDIO_FORMAT_S24P, SPA_AUDIO_FORMAT_S24P,
SPA_AUDIO_FORMAT_S24, SPA_AUDIO_FORMAT_S24,
SPA_AUDIO_FORMAT_S24_OE, SPA_AUDIO_FORMAT_S24_OE,
SPA_AUDIO_FORMAT_S16P, SPA_AUDIO_FORMAT_S16P,
SPA_AUDIO_FORMAT_S16, SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S16_OE,
SPA_AUDIO_FORMAT_S8P, SPA_AUDIO_FORMAT_S8P,
SPA_AUDIO_FORMAT_S8, SPA_AUDIO_FORMAT_S8,
SPA_AUDIO_FORMAT_U8, SPA_AUDIO_FORMAT_U8,
@ -905,11 +909,15 @@ static int calc_width(struct spa_audio_info *info)
{ {
switch (info->info.raw.format) { switch (info->info.raw.format) {
case SPA_AUDIO_FORMAT_U8: case SPA_AUDIO_FORMAT_U8:
case SPA_AUDIO_FORMAT_U8P:
case SPA_AUDIO_FORMAT_S8: case SPA_AUDIO_FORMAT_S8:
case SPA_AUDIO_FORMAT_S8P:
return 1; return 1;
case SPA_AUDIO_FORMAT_S16P:
case SPA_AUDIO_FORMAT_S16: case SPA_AUDIO_FORMAT_S16:
case SPA_AUDIO_FORMAT_S16_OE: case SPA_AUDIO_FORMAT_S16_OE:
return 2; return 2;
case SPA_AUDIO_FORMAT_S24P:
case SPA_AUDIO_FORMAT_S24: case SPA_AUDIO_FORMAT_S24:
case SPA_AUDIO_FORMAT_S24_OE: case SPA_AUDIO_FORMAT_S24_OE:
return 3; return 3;

View file

@ -445,19 +445,23 @@ static int port_enum_formats(void *object,
SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat, SPA_TYPE_OBJECT_Format, SPA_PARAM_EnumFormat,
SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio), SPA_FORMAT_mediaType, SPA_POD_Id(SPA_MEDIA_TYPE_audio),
SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw), SPA_FORMAT_mediaSubtype, SPA_POD_Id(SPA_MEDIA_SUBTYPE_raw),
SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(16, SPA_FORMAT_AUDIO_format, SPA_POD_CHOICE_ENUM_Id(20,
SPA_AUDIO_FORMAT_F32P, SPA_AUDIO_FORMAT_F32P,
SPA_AUDIO_FORMAT_F32P, SPA_AUDIO_FORMAT_F32P,
SPA_AUDIO_FORMAT_F32, SPA_AUDIO_FORMAT_F32,
SPA_AUDIO_FORMAT_F32_OE,
SPA_AUDIO_FORMAT_S32P, SPA_AUDIO_FORMAT_S32P,
SPA_AUDIO_FORMAT_S32, SPA_AUDIO_FORMAT_S32,
SPA_AUDIO_FORMAT_S32_OE,
SPA_AUDIO_FORMAT_S24_32P, SPA_AUDIO_FORMAT_S24_32P,
SPA_AUDIO_FORMAT_S24_32, SPA_AUDIO_FORMAT_S24_32,
SPA_AUDIO_FORMAT_S24_32_OE,
SPA_AUDIO_FORMAT_S24P, SPA_AUDIO_FORMAT_S24P,
SPA_AUDIO_FORMAT_S24, SPA_AUDIO_FORMAT_S24,
SPA_AUDIO_FORMAT_S24_OE, SPA_AUDIO_FORMAT_S24_OE,
SPA_AUDIO_FORMAT_S16P, SPA_AUDIO_FORMAT_S16P,
SPA_AUDIO_FORMAT_S16, SPA_AUDIO_FORMAT_S16,
SPA_AUDIO_FORMAT_S16_OE,
SPA_AUDIO_FORMAT_S8P, SPA_AUDIO_FORMAT_S8P,
SPA_AUDIO_FORMAT_S8, SPA_AUDIO_FORMAT_S8,
SPA_AUDIO_FORMAT_U8P, SPA_AUDIO_FORMAT_U8P,