mirror of
				https://gitlab.freedesktop.org/pipewire/pipewire.git
				synced 2025-11-03 09:01:54 -05:00 
			
		
		
		
	bluez5: add codec check_caps + check vendor codec id for ldac & aptx
This commit is contained in:
		
							parent
							
								
									ce335b6d88
								
							
						
					
					
						commit
						0908588d0c
					
				
					 4 changed files with 28 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -86,6 +86,10 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
 | 
			
		|||
 | 
			
		||||
	memcpy(&conf, caps, sizeof(conf));
 | 
			
		||||
 | 
			
		||||
	if (codec->vendor.vendor_id != conf.info.vendor_id ||
 | 
			
		||||
	    codec->vendor.codec_id != conf.info.codec_id)
 | 
			
		||||
		return -ENOTSUP;
 | 
			
		||||
 | 
			
		||||
	if (conf.frequency & APTX_SAMPLING_FREQ_48000)
 | 
			
		||||
		conf.frequency = APTX_SAMPLING_FREQ_48000;
 | 
			
		||||
	else if (conf.frequency & APTX_SAMPLING_FREQ_44100)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -138,8 +138,10 @@ static int codec_select_config(const struct a2dp_codec *codec, uint32_t flags,
 | 
			
		|||
                return -EINVAL;
 | 
			
		||||
 | 
			
		||||
	memcpy(&conf, caps, sizeof(conf));
 | 
			
		||||
	conf.info.vendor_id = LDAC_VENDOR_ID;
 | 
			
		||||
	conf.info.codec_id = LDAC_CODEC_ID;
 | 
			
		||||
 | 
			
		||||
	if (codec->vendor.vendor_id != conf.info.vendor_id ||
 | 
			
		||||
	    codec->vendor.codec_id != conf.info.codec_id)
 | 
			
		||||
		return -ENOTSUP;
 | 
			
		||||
 | 
			
		||||
	if (conf.frequency & LDACBT_SAMPLING_FREQ_044100)
 | 
			
		||||
		conf.frequency = LDACBT_SAMPLING_FREQ_044100;
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -10,6 +10,24 @@
 | 
			
		|||
 | 
			
		||||
#include "a2dp-codecs.h"
 | 
			
		||||
 | 
			
		||||
bool a2dp_codec_check_caps(const struct a2dp_codec *codec, unsigned int codec_id, const void *caps, size_t caps_size)
 | 
			
		||||
{
 | 
			
		||||
	uint8_t config[A2DP_MAX_CAPS_SIZE];
 | 
			
		||||
	int res;
 | 
			
		||||
 | 
			
		||||
	if (codec_id != codec->codec_id)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	if (caps == NULL)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	res = codec->select_config(codec, 0, caps, caps_size, NULL, config);
 | 
			
		||||
	if (res < 0)
 | 
			
		||||
		return false;
 | 
			
		||||
 | 
			
		||||
	return ((size_t)res == caps_size);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
#if ENABLE_MP3
 | 
			
		||||
const a2dp_mpeg_t bluez_a2dp_mpeg = {
 | 
			
		||||
	.layer =
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -377,4 +377,6 @@ struct a2dp_codec {
 | 
			
		|||
 | 
			
		||||
extern const struct a2dp_codec **a2dp_codecs;
 | 
			
		||||
 | 
			
		||||
bool a2dp_codec_check_caps(const struct a2dp_codec *codec, unsigned int codec_id, const void *caps, size_t caps_size);
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue