mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	Update a2dp-codec-sbc.c
This commit is contained in:
		
							parent
							
								
									132786c202
								
							
						
					
					
						commit
						471fffe4a3
					
				
					 1 changed files with 26 additions and 11 deletions
				
			
		| 
						 | 
					@ -86,36 +86,37 @@ static int codec_fill_caps(const struct a2dp_codec *codec, uint32_t flags,
 | 
				
			||||||
static uint8_t default_bitpool(uint8_t freq, uint8_t mode, bool xq)
 | 
					static uint8_t default_bitpool(uint8_t freq, uint8_t mode, bool xq)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	/* A2DP spec v1.2 states that all SNK implementation shall handle bitrates
 | 
						/* A2DP spec v1.2 states that all SNK implementation shall handle bitrates
 | 
				
			||||||
	   of up to 512 kbps (~ bitpool = 76 stereo, or 2x38 dual channel). */
 | 
						 * of up to 512 kbps (~ bitpool = 86 stereo, or 2x43 dual channel at 44.1KHz 
 | 
				
			||||||
 | 
						 * or ~ bitpool = 78 stereo, or 2x39 dual channel at 48KHz). */
 | 
				
			||||||
	switch (freq) {
 | 
						switch (freq) {
 | 
				
			||||||
	case SBC_SAMPLING_FREQ_16000:
 | 
						case SBC_SAMPLING_FREQ_16000:
 | 
				
			||||||
        case SBC_SAMPLING_FREQ_32000:
 | 
					        case SBC_SAMPLING_FREQ_32000:
 | 
				
			||||||
		return 53;
 | 
							return 64;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	case SBC_SAMPLING_FREQ_44100:
 | 
						case SBC_SAMPLING_FREQ_44100:
 | 
				
			||||||
		switch (mode) {
 | 
							switch (mode) {
 | 
				
			||||||
		case SBC_CHANNEL_MODE_MONO:
 | 
							case SBC_CHANNEL_MODE_MONO:
 | 
				
			||||||
		case SBC_CHANNEL_MODE_DUAL_CHANNEL:
 | 
							case SBC_CHANNEL_MODE_DUAL_CHANNEL:
 | 
				
			||||||
			return xq ? 38 : 31;
 | 
								return xq ? 43 : 32;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case SBC_CHANNEL_MODE_STEREO:
 | 
							case SBC_CHANNEL_MODE_STEREO:
 | 
				
			||||||
		case SBC_CHANNEL_MODE_JOINT_STEREO:
 | 
							case SBC_CHANNEL_MODE_JOINT_STEREO:
 | 
				
			||||||
			return xq ? 64 : 53;
 | 
								return xq ? 86 : 64;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return 53;
 | 
							return xq ? 86 : 64;
 | 
				
			||||||
	case SBC_SAMPLING_FREQ_48000:
 | 
						case SBC_SAMPLING_FREQ_48000:
 | 
				
			||||||
		switch (mode) {
 | 
							switch (mode) {
 | 
				
			||||||
		case SBC_CHANNEL_MODE_MONO:
 | 
							case SBC_CHANNEL_MODE_MONO:
 | 
				
			||||||
		case SBC_CHANNEL_MODE_DUAL_CHANNEL:
 | 
							case SBC_CHANNEL_MODE_DUAL_CHANNEL:
 | 
				
			||||||
			return xq ? 35 : 29;
 | 
								return xq ? 39 : 29;
 | 
				
			||||||
 | 
					
 | 
				
			||||||
		case SBC_CHANNEL_MODE_STEREO:
 | 
							case SBC_CHANNEL_MODE_STEREO:
 | 
				
			||||||
		case SBC_CHANNEL_MODE_JOINT_STEREO:
 | 
							case SBC_CHANNEL_MODE_JOINT_STEREO:
 | 
				
			||||||
			return xq ? 62 : 51;
 | 
								return xq ? 78 : 58;
 | 
				
			||||||
		}
 | 
							}
 | 
				
			||||||
		return 51;
 | 
							return xq ? 78 : 58;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	return 53;
 | 
						return xq ? 86 : 64;
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
 | 
					static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
 | 
				
			||||||
| 
						 | 
					@ -133,7 +134,15 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	memcpy(&conf, caps, sizeof(conf));
 | 
						memcpy(&conf, caps, sizeof(conf));
 | 
				
			||||||
 | 
					
 | 
				
			||||||
	if (conf.frequency & SBC_SAMPLING_FREQ_48000)
 | 
						if (xq) {
 | 
				
			||||||
 | 
							if (conf.frequency & SBC_SAMPLING_FREQ_44100)
 | 
				
			||||||
 | 
								conf.frequency = SBC_SAMPLING_FREQ_44100;
 | 
				
			||||||
 | 
							else if (conf.frequency & SBC_SAMPLING_FREQ_48000)
 | 
				
			||||||
 | 
								conf.frequency = SBC_SAMPLING_FREQ_48000;
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								return -ENOTSUP;
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						else if (conf.frequency & SBC_SAMPLING_FREQ_48000)
 | 
				
			||||||
		conf.frequency = SBC_SAMPLING_FREQ_48000;
 | 
							conf.frequency = SBC_SAMPLING_FREQ_48000;
 | 
				
			||||||
	else if (conf.frequency & SBC_SAMPLING_FREQ_44100)
 | 
						else if (conf.frequency & SBC_SAMPLING_FREQ_44100)
 | 
				
			||||||
		conf.frequency = SBC_SAMPLING_FREQ_44100;
 | 
							conf.frequency = SBC_SAMPLING_FREQ_44100;
 | 
				
			||||||
| 
						 | 
					@ -147,8 +156,14 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
 | 
				
			||||||
	if (xq) {
 | 
						if (xq) {
 | 
				
			||||||
		if (conf.channel_mode & SBC_CHANNEL_MODE_DUAL_CHANNEL)
 | 
							if (conf.channel_mode & SBC_CHANNEL_MODE_DUAL_CHANNEL)
 | 
				
			||||||
			conf.channel_mode = SBC_CHANNEL_MODE_DUAL_CHANNEL;
 | 
								conf.channel_mode = SBC_CHANNEL_MODE_DUAL_CHANNEL;
 | 
				
			||||||
 | 
							else if (conf.channel_mode & SBC_CHANNEL_MODE_JOINT_STEREO)
 | 
				
			||||||
 | 
								conf.channel_mode = SBC_CHANNEL_MODE_JOINT_STEREO;
 | 
				
			||||||
 | 
							else if (conf.channel_mode & SBC_CHANNEL_MODE_STEREO)
 | 
				
			||||||
 | 
								conf.channel_mode = SBC_CHANNEL_MODE_STEREO;
 | 
				
			||||||
 | 
							else
 | 
				
			||||||
 | 
								return -ENOTSUP;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	if (conf.channel_mode & SBC_CHANNEL_MODE_JOINT_STEREO)
 | 
						else if (conf.channel_mode & SBC_CHANNEL_MODE_JOINT_STEREO)
 | 
				
			||||||
		conf.channel_mode = SBC_CHANNEL_MODE_JOINT_STEREO;
 | 
							conf.channel_mode = SBC_CHANNEL_MODE_JOINT_STEREO;
 | 
				
			||||||
	else if (conf.channel_mode & SBC_CHANNEL_MODE_STEREO)
 | 
						else if (conf.channel_mode & SBC_CHANNEL_MODE_STEREO)
 | 
				
			||||||
		conf.channel_mode = SBC_CHANNEL_MODE_STEREO;
 | 
							conf.channel_mode = SBC_CHANNEL_MODE_STEREO;
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue