/****************************************************************************** Copyright (c) 2016, The Linux Foundation. All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of The Linux Foundation nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. ******************************************************************************/ /****************************************************************************** * * interface to aptX codec * ******************************************************************************/ #ifndef A2D_APTX_H #define A2D_APTX_H /* aptX codec specific settings*/ #define A2D_APTX_CODEC_LEN 9 #define A2D_APTX_VENDOR_ID (0x0000004F) #define A2D_APTX_CODEC_ID_BLUETOOTH (0x0001) #define A2D_APTX_SAMPLERATE_44100 (0x20) #define A2D_APTX_SAMPLERATE_48000 (0x10) #define A2D_APTX_CHANNELS_STEREO (0x02) #define A2D_APTX_CHANNELS_MONO (0x01) #define A2D_APTX_FUTURE_1 (0x00) #define A2D_APTX_FUTURE_2 (0x00) #define A2D_APTX_OTHER_FEATURES_NONE (0x00000000) #define A2D_AV_APTX_AUDIO (0x00) #define A2D_APTX_CHANNEL (0x0001) #define A2D_APTX_SAMPLERATE (0x22) /***************************************************************************** ** Type Definitions *****************************************************************************/ typedef enum { APTX_CODEC_NONE=0, APTX_CODEC, APTX_HD_CODEC, } A2D_AptXCodecType; typedef void (*A2D_AptXThreadFn)(void *context); typedef UINT32 (*A2D_AptXReadFn) (UINT8 ch_id, UINT16 *p_msg_evt, UINT8* p_buf, UINT32 len); typedef int (*A2D_AptXBufferSendFn) (UINT8*, int, int); typedef void (*A2D_AptXSetPriorityFn)(tHIGH_PRIORITY_TASK task); typedef struct { UINT32 vendorId; UINT16 codecId; /* Codec ID for aptX */ UINT8 sampleRate; /* Sampling Frequency */ UINT8 channelMode; /* STEREO/DUAL/MONO */ UINT8 future1; UINT8 future2; } tA2D_APTX_CIE; typedef struct { INT16 s16SamplingFreq; /* 16k, 32k, 44.1k or 48k*/ INT16 s16ChannelMode; /* mono, dual, streo or joint streo*/ UINT16 u16BitRate; UINT16 *ps16NextPcmBuffer; UINT8 *pu8Packet; UINT8 *pu8NextPacket; UINT16 u16PacketLength; void* encoder; } A2D_APTX_ENC_PARAMS; extern const char* A2D_APTX_SCHED_LIB_NAME; extern void *A2dAptXSchedLibHandle; extern BOOLEAN isA2dAptXEnabled; extern thread_t *A2d_aptx_thread; extern A2D_AptXThreadFn A2d_aptx_thread_fn; /***************************************************************************** ** external function declarations *****************************************************************************/ #ifdef __cplusplus extern "C" { #endif extern UINT8 A2D_BldAptxInfo(UINT8 media_type, tA2D_APTX_CIE *p_ie, UINT8 *p_result); extern UINT8 A2D_ParsAptxInfo(tA2D_APTX_CIE *p_ie, UINT8 *p_info, BOOLEAN for_caps); extern int (*A2D_aptx_encoder_init)(void); extern A2D_AptXThreadFn (*A2D_aptx_sched_start)(void *encoder, A2D_AptXCodecType aptX_codec_type, BOOLEAN use_SCMS_T, BOOLEAN is_24bit_audio, UINT16 sample_rate, UINT8 format_bits, UINT8 channel, UINT16 mtu, A2D_AptXReadFn read_fn, A2D_AptXBufferSendFn send_fn, A2D_AptXSetPriorityFn set_priority_fn, BOOLEAN test, BOOLEAN trace); extern BOOLEAN (*A2D_aptx_sched_stop)(void); extern void (*A2D_aptx_encoder_deinit)(void); extern UINT8 a2d_av_aptx_cfg_in_cap(UINT8 *p_cfg, tA2D_APTX_CIE *p_cap); extern BOOLEAN A2D_check_and_init_aptX(); extern void A2D_deinit_aptX(); extern void A2D_close_aptX(); #ifdef __cplusplus } #endif #endif /* A2D_APTX_H */