mirror of
				https://github.com/0xFEEDC0DE64/arduino-esp32.git
				synced 2025-11-03 23:51:39 +01:00 
			
		
		
		
	
		
			
	
	
		
			224 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
		
		
			
		
	
	
			224 lines
		
	
	
		
			9.9 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| 
								 | 
							
								/******************************************************************************
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Copyright (C) 2004-2012 Broadcom Corporation
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Licensed under the Apache License, Version 2.0 (the "License");
							 | 
						||
| 
								 | 
							
								 *  you may not use this file except in compliance with the License.
							 | 
						||
| 
								 | 
							
								 *  You may obtain a copy of the License at:
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  http://www.apache.org/licenses/LICENSE-2.0
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  Unless required by applicable law or agreed to in writing, software
							 | 
						||
| 
								 | 
							
								 *  distributed under the License is distributed on an "AS IS" BASIS,
							 | 
						||
| 
								 | 
							
								 *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
							 | 
						||
| 
								 | 
							
								 *  See the License for the specific language governing permissions and
							 | 
						||
| 
								 | 
							
								 *  limitations under the License.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 ******************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/******************************************************************************
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 *  This is the interface to utility functions for dealing with SBC data
							 | 
						||
| 
								 | 
							
								 *  frames and codec capabilities.
							 | 
						||
| 
								 | 
							
								 *
							 | 
						||
| 
								 | 
							
								 ******************************************************************************/
							 | 
						||
| 
								 | 
							
								#ifndef BTA_AV_SBC_H
							 | 
						||
| 
								 | 
							
								#define BTA_AV_SBC_H
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#if (BTA_AV_INCLUDED == TRUE)
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*****************************************************************************
							 | 
						||
| 
								 | 
							
								**  constants
							 | 
						||
| 
								 | 
							
								*****************************************************************************/
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/* SBC packet header size */
							 | 
						||
| 
								 | 
							
								#define BTA_AV_SBC_HDR_SIZE         A2D_SBC_MPL_HDR_LEN
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_init_up_sample
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      initialize the up sample
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**                  src_sps: samples per second (source audio data)
							 | 
						||
| 
								 | 
							
								**                  dst_sps: samples per second (converted audio data)
							 | 
						||
| 
								 | 
							
								**                  bits: number of bits per pcm sample
							 | 
						||
| 
								 | 
							
								**                  n_channels: number of channels (i.e. mono(1), stereo(2)...)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          none
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern void bta_av_sbc_init_up_sample (UINT32 src_sps, UINT32 dst_sps,
							 | 
						||
| 
								 | 
							
								                                       UINT16 bits, UINT16 n_channels);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_up_sample
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      Given the source (p_src) audio data and
							 | 
						||
| 
								 | 
							
								**                  source speed (src_sps, samples per second),
							 | 
						||
| 
								 | 
							
								**                  This function converts it to audio data in the desired format
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**                  p_src: the data buffer that holds the source audio data
							 | 
						||
| 
								 | 
							
								**                  p_dst: the data buffer to hold the converted audio data
							 | 
						||
| 
								 | 
							
								**                  src_samples: The number of source samples (number of bytes)
							 | 
						||
| 
								 | 
							
								**                  dst_samples: The size of p_dst (number of bytes)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Note:            An AE reported an issue with this function.
							 | 
						||
| 
								 | 
							
								**                  When called with bta_av_sbc_up_sample(src, uint8_array_dst..)
							 | 
						||
| 
								 | 
							
								**                  the byte before uint8_array_dst may get overwritten.
							 | 
						||
| 
								 | 
							
								**                  Using uint16_array_dst avoids the problem.
							 | 
						||
| 
								 | 
							
								**                  This issue is related to endian-ness and is hard to resolve
							 | 
						||
| 
								 | 
							
								**                  in a generic manner.
							 | 
						||
| 
								 | 
							
								** **************** Please use uint16 array as dst.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          The number of bytes used in p_dst
							 | 
						||
| 
								 | 
							
								**                  The number of bytes used in p_src (in *p_ret)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern int bta_av_sbc_up_sample (void *p_src, void *p_dst,
							 | 
						||
| 
								 | 
							
								                                 UINT32 src_samples, UINT32 dst_samples,
							 | 
						||
| 
								 | 
							
								                                 UINT32 *p_ret);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_up_sample_16s (16bits-stereo)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      Given the source (p_src) audio data and
							 | 
						||
| 
								 | 
							
								**                  source speed (src_sps, samples per second),
							 | 
						||
| 
								 | 
							
								**                  This function converts it to audio data in the desired format
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**                  p_src: the data buffer that holds the source audio data
							 | 
						||
| 
								 | 
							
								**                  p_dst: the data buffer to hold the converted audio data
							 | 
						||
| 
								 | 
							
								**                  src_samples: The number of source samples (in uint of 4 bytes)
							 | 
						||
| 
								 | 
							
								**                  dst_samples: The size of p_dst (in uint of 4 bytes)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          The number of bytes used in p_dst
							 | 
						||
| 
								 | 
							
								**                  The number of bytes used in p_src (in *p_ret)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern int bta_av_sbc_up_sample_16s (void *p_src, void *p_dst,
							 | 
						||
| 
								 | 
							
								                                     UINT32 src_samples, UINT32 dst_samples,
							 | 
						||
| 
								 | 
							
								                                     UINT32 *p_ret);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_up_sample_16m (16bits-mono)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      Given the source (p_src) audio data and
							 | 
						||
| 
								 | 
							
								**                  source speed (src_sps, samples per second),
							 | 
						||
| 
								 | 
							
								**                  This function converts it to audio data in the desired format
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**                  p_src: the data buffer that holds the source audio data
							 | 
						||
| 
								 | 
							
								**                  p_dst: the data buffer to hold the converted audio data
							 | 
						||
| 
								 | 
							
								**                  src_samples: The number of source samples (in uint of 2 bytes)
							 | 
						||
| 
								 | 
							
								**                  dst_samples: The size of p_dst (in uint of 2 bytes)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          The number of bytes used in p_dst
							 | 
						||
| 
								 | 
							
								**                  The number of bytes used in p_src (in *p_ret)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern int bta_av_sbc_up_sample_16m (void *p_src, void *p_dst,
							 | 
						||
| 
								 | 
							
								                                     UINT32 src_samples, UINT32 dst_samples,
							 | 
						||
| 
								 | 
							
								                                     UINT32 *p_ret);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_up_sample_8s (8bits-stereo)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      Given the source (p_src) audio data and
							 | 
						||
| 
								 | 
							
								**                  source speed (src_sps, samples per second),
							 | 
						||
| 
								 | 
							
								**                  This function converts it to audio data in the desired format
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**                  p_src: the data buffer that holds the source audio data
							 | 
						||
| 
								 | 
							
								**                  p_dst: the data buffer to hold the converted audio data
							 | 
						||
| 
								 | 
							
								**                  src_samples: The number of source samples (in uint of 2 bytes)
							 | 
						||
| 
								 | 
							
								**                  dst_samples: The size of p_dst (in uint of 2 bytes)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          The number of bytes used in p_dst
							 | 
						||
| 
								 | 
							
								**                  The number of bytes used in p_src (in *p_ret)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern int bta_av_sbc_up_sample_8s (void *p_src, void *p_dst,
							 | 
						||
| 
								 | 
							
								                                    UINT32 src_samples, UINT32 dst_samples,
							 | 
						||
| 
								 | 
							
								                                    UINT32 *p_ret);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_up_sample_8m (8bits-mono)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      Given the source (p_src) audio data and
							 | 
						||
| 
								 | 
							
								**                  source speed (src_sps, samples per second),
							 | 
						||
| 
								 | 
							
								**                  This function converts it to audio data in the desired format
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								**                  p_src: the data buffer that holds the source audio data
							 | 
						||
| 
								 | 
							
								**                  p_dst: the data buffer to hold the converted audio data
							 | 
						||
| 
								 | 
							
								**                  src_samples: The number of source samples (number of bytes)
							 | 
						||
| 
								 | 
							
								**                  dst_samples: The size of p_dst (number of bytes)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          The number of bytes used in p_dst
							 | 
						||
| 
								 | 
							
								**                  The number of bytes used in p_src (in *p_ret)
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern int bta_av_sbc_up_sample_8m (void *p_src, void *p_dst,
							 | 
						||
| 
								 | 
							
								                                    UINT32 src_samples, UINT32 dst_samples,
							 | 
						||
| 
								 | 
							
								                                    UINT32 *p_ret);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_cfg_for_cap
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      Determine the preferred SBC codec configuration for the
							 | 
						||
| 
								 | 
							
								**                  given codec capabilities.  The function is passed the
							 | 
						||
| 
								 | 
							
								**                  preferred codec configuration and the peer codec
							 | 
						||
| 
								 | 
							
								**                  capabilities for the stream.  The function attempts to
							 | 
						||
| 
								 | 
							
								**                  match the preferred capabilities with the configuration
							 | 
						||
| 
								 | 
							
								**                  as best it can.  The resulting codec configuration is
							 | 
						||
| 
								 | 
							
								**                  returned in the same memory used for the capabilities.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          0 if ok, nonzero if error.
							 | 
						||
| 
								 | 
							
								**                  Codec configuration in p_cap.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern UINT8 bta_av_sbc_cfg_for_cap(UINT8 *p_peer, tA2D_SBC_CIE *p_cap, tA2D_SBC_CIE *p_pref);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_cfg_in_cap
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      This function checks whether an SBC codec configuration
							 | 
						||
| 
								 | 
							
								**                  is allowable for the given codec capabilities.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          0 if ok, nonzero if error.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern UINT8 bta_av_sbc_cfg_in_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_cfg_matches_cap
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      This function checks whether an SBC codec configuration
							 | 
						||
| 
								 | 
							
								**                  matched with capabilities. Here we check subset.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          0 if ok, nonzero if error.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern UINT8 bta_av_sbc_cfg_matches_cap(UINT8 *p_cfg, tA2D_SBC_CIE *p_cap);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								/*******************************************************************************
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Function         bta_av_sbc_bld_hdr
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Description      This function builds the packet header for MPF1.
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								** Returns          void
							 | 
						||
| 
								 | 
							
								**
							 | 
						||
| 
								 | 
							
								*******************************************************************************/
							 | 
						||
| 
								 | 
							
								extern void bta_av_sbc_bld_hdr(BT_HDR *p_buf, UINT16 fr_per_pkt);
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif  ///BTA_AV_INCLUDED == TRUE
							 | 
						||
| 
								 | 
							
								
							 | 
						||
| 
								 | 
							
								#endif /* BTA_AV_SBC_H */
							 | 
						||
| 
								 | 
							
								
							 |