mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	pulse-server: improve format parsing
The pulseaudio format should be parsed case insensitive. Add some more pulseaudio supported formats.
This commit is contained in:
		
							parent
							
								
									03abce72e5
								
							
						
					
					
						commit
						8a24f58cd1
					
				
					 2 changed files with 38 additions and 16 deletions
				
			
		| 
						 | 
				
			
			@ -13,8 +13,8 @@
 | 
			
		|||
 | 
			
		||||
static const struct format audio_formats[] = {
 | 
			
		||||
	[SAMPLE_U8] = { SAMPLE_U8, SPA_AUDIO_FORMAT_U8, "u8", 1 },
 | 
			
		||||
	[SAMPLE_ALAW] = { SAMPLE_ALAW, SPA_AUDIO_FORMAT_ALAW, "aLaw", 1 },
 | 
			
		||||
	[SAMPLE_ULAW] = { SAMPLE_ULAW, SPA_AUDIO_FORMAT_ULAW, "uLaw", 1 },
 | 
			
		||||
	[SAMPLE_ALAW] = { SAMPLE_ALAW, SPA_AUDIO_FORMAT_ALAW, "alaw", 1 },
 | 
			
		||||
	[SAMPLE_ULAW] = { SAMPLE_ULAW, SPA_AUDIO_FORMAT_ULAW, "ulaw", 1 },
 | 
			
		||||
	[SAMPLE_S16LE] = { SAMPLE_S16LE, SPA_AUDIO_FORMAT_S16_LE, "s16le", 2 },
 | 
			
		||||
	[SAMPLE_S16BE] = { SAMPLE_S16BE, SPA_AUDIO_FORMAT_S16_BE, "s16be", 2 },
 | 
			
		||||
	[SAMPLE_FLOAT32LE] = { SAMPLE_FLOAT32LE, SPA_AUDIO_FORMAT_F32_LE, "float32le", 4 },
 | 
			
		||||
| 
						 | 
				
			
			@ -26,19 +26,30 @@ static const struct format audio_formats[] = {
 | 
			
		|||
	[SAMPLE_S24_32LE] = { SAMPLE_S24_32LE, SPA_AUDIO_FORMAT_S24_32_LE, "s24-32le", 4 },
 | 
			
		||||
	[SAMPLE_S24_32BE] = { SAMPLE_S24_32BE, SPA_AUDIO_FORMAT_S24_32_BE, "s24-32be", 4 },
 | 
			
		||||
 | 
			
		||||
#if __BYTE_ORDER == __BIG_ENDIAN
 | 
			
		||||
	{ SAMPLE_S16BE, SPA_AUDIO_FORMAT_S16_BE, "s16ne", 2 },
 | 
			
		||||
	{ SAMPLE_FLOAT32BE, SPA_AUDIO_FORMAT_F32_BE, "float32ne", 4 },
 | 
			
		||||
	{ SAMPLE_S32BE, SPA_AUDIO_FORMAT_S32_BE, "s32ne", 4 },
 | 
			
		||||
	{ SAMPLE_S24BE, SPA_AUDIO_FORMAT_S24_BE, "s24ne", 3 },
 | 
			
		||||
	{ SAMPLE_S24_32BE, SPA_AUDIO_FORMAT_S24_32_BE, "s24-32ne", 4 },
 | 
			
		||||
#elif __BYTE_ORDER == __LITTLE_ENDIAN
 | 
			
		||||
	{ SAMPLE_S16LE, SPA_AUDIO_FORMAT_S16_LE, "s16ne", 2 },
 | 
			
		||||
	{ SAMPLE_FLOAT32LE, SPA_AUDIO_FORMAT_F32_LE, "float32ne", 4 },
 | 
			
		||||
	{ SAMPLE_S32LE, SPA_AUDIO_FORMAT_S32_LE, "s32ne", 4 },
 | 
			
		||||
	{ SAMPLE_S24LE, SPA_AUDIO_FORMAT_S24_LE, "s24ne", 3 },
 | 
			
		||||
	{ SAMPLE_S24_32LE, SPA_AUDIO_FORMAT_S24_32_LE, "s24-32ne", 4 },
 | 
			
		||||
#endif
 | 
			
		||||
	{ SAMPLE_U8, SPA_AUDIO_FORMAT_U8, "8", 1 },
 | 
			
		||||
	{ SAMPLE_ULAW, SPA_AUDIO_FORMAT_ULAW, "mulaw", 1 },
 | 
			
		||||
 | 
			
		||||
	{ SAMPLE_S16NE, SPA_AUDIO_FORMAT_S16, "s16ne", 2 },
 | 
			
		||||
	{ SAMPLE_S16NE, SPA_AUDIO_FORMAT_S16, "s16", 2 },
 | 
			
		||||
	{ SAMPLE_S16NE, SPA_AUDIO_FORMAT_S16, "16", 2 },
 | 
			
		||||
	{ SAMPLE_FLOAT32NE, SPA_AUDIO_FORMAT_F32, "float32ne", 4 },
 | 
			
		||||
	{ SAMPLE_FLOAT32NE, SPA_AUDIO_FORMAT_F32, "float32", 4 },
 | 
			
		||||
	{ SAMPLE_FLOAT32NE, SPA_AUDIO_FORMAT_F32, "float", 4 },
 | 
			
		||||
	{ SAMPLE_S32NE, SPA_AUDIO_FORMAT_S32, "s32ne", 4 },
 | 
			
		||||
	{ SAMPLE_S32NE, SPA_AUDIO_FORMAT_S32, "s32", 4 },
 | 
			
		||||
	{ SAMPLE_S32NE, SPA_AUDIO_FORMAT_S32, "32", 4 },
 | 
			
		||||
	{ SAMPLE_S24NE, SPA_AUDIO_FORMAT_S24, "s24ne", 3 },
 | 
			
		||||
	{ SAMPLE_S24NE, SPA_AUDIO_FORMAT_S24, "s24", 3 },
 | 
			
		||||
	{ SAMPLE_S24NE, SPA_AUDIO_FORMAT_S24, "24", 3 },
 | 
			
		||||
	{ SAMPLE_S24_32NE, SPA_AUDIO_FORMAT_S24_32, "s24-32ne", 4 },
 | 
			
		||||
	{ SAMPLE_S24_32NE, SPA_AUDIO_FORMAT_S24_32, "s24-32", 4 },
 | 
			
		||||
 | 
			
		||||
	{ SAMPLE_S16RE, SPA_AUDIO_FORMAT_S16_OE, "s16re", 2 },
 | 
			
		||||
	{ SAMPLE_FLOAT32RE, SPA_AUDIO_FORMAT_F32_OE, "float32re", 4 },
 | 
			
		||||
	{ SAMPLE_S32RE, SPA_AUDIO_FORMAT_S32_OE, "s32re", 4 },
 | 
			
		||||
	{ SAMPLE_S24RE, SPA_AUDIO_FORMAT_S24_OE, "s24re", 3 },
 | 
			
		||||
	{ SAMPLE_S24_32RE, SPA_AUDIO_FORMAT_S24_32_OE, "s24-32re", 4 },
 | 
			
		||||
 | 
			
		||||
	/* planar formats, we just report them as interleaved */
 | 
			
		||||
	{ SAMPLE_U8, SPA_AUDIO_FORMAT_U8P, "u8ne", 1 },
 | 
			
		||||
	{ SAMPLE_S16NE, SPA_AUDIO_FORMAT_S16P, "s16ne", 2 },
 | 
			
		||||
| 
						 | 
				
			
			@ -141,7 +152,8 @@ uint32_t format_paname2id(const char *name, size_t size)
 | 
			
		|||
{
 | 
			
		||||
	SPA_FOR_EACH_ELEMENT_VAR(audio_formats, f) {
 | 
			
		||||
		if (f->name != NULL &&
 | 
			
		||||
		    strncmp(name, f->name, size) == 0)
 | 
			
		||||
		    strncasecmp(name, f->name, size) == 0 &&
 | 
			
		||||
		    strlen(f->name) == size)
 | 
			
		||||
			return f->id;
 | 
			
		||||
	}
 | 
			
		||||
	return SPA_AUDIO_FORMAT_UNKNOWN;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -38,12 +38,22 @@ enum sample_format {
 | 
			
		|||
#define SAMPLE_S32NE		SAMPLE_S32BE
 | 
			
		||||
#define	SAMPLE_S24NE		SAMPLE_S24BE
 | 
			
		||||
#define SAMPLE_S24_32NE		SAMPLE_S24_32BE
 | 
			
		||||
#define SAMPLE_S16RE		SAMPLE_S16LE
 | 
			
		||||
#define SAMPLE_FLOAT32RE	SAMPLE_FLOAT32LE
 | 
			
		||||
#define SAMPLE_S32RE		SAMPLE_S32LE
 | 
			
		||||
#define	SAMPLE_S24RE		SAMPLE_S24LE
 | 
			
		||||
#define SAMPLE_S24_32RE		SAMPLE_S24_32LE
 | 
			
		||||
#elif __BYTE_ORDER == __LITTLE_ENDIAN
 | 
			
		||||
#define SAMPLE_S16NE		SAMPLE_S16LE
 | 
			
		||||
#define SAMPLE_FLOAT32NE	SAMPLE_FLOAT32LE
 | 
			
		||||
#define SAMPLE_S32NE		SAMPLE_S32LE
 | 
			
		||||
#define	SAMPLE_S24NE		SAMPLE_S24LE
 | 
			
		||||
#define SAMPLE_S24_32NE		SAMPLE_S24_32LE
 | 
			
		||||
#define SAMPLE_S16RE		SAMPLE_S16BE
 | 
			
		||||
#define SAMPLE_FLOAT32RE	SAMPLE_FLOAT32BE
 | 
			
		||||
#define SAMPLE_S32RE		SAMPLE_S32BE
 | 
			
		||||
#define	SAMPLE_S24RE		SAMPLE_S24BE
 | 
			
		||||
#define SAMPLE_S24_32RE		SAMPLE_S24_32BE
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
struct format {
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue