1*aef9bcd9SKiyoung Kim /* 2*aef9bcd9SKiyoung Kim * Copyright (C) 2013 - 2016 Sony Corporation 3*aef9bcd9SKiyoung Kim * 4*aef9bcd9SKiyoung Kim * Licensed under the Apache License, Version 2.0 (the "License"); 5*aef9bcd9SKiyoung Kim * you may not use this file except in compliance with the License. 6*aef9bcd9SKiyoung Kim * You may obtain a copy of the License at 7*aef9bcd9SKiyoung Kim * 8*aef9bcd9SKiyoung Kim * http://www.apache.org/licenses/LICENSE-2.0 9*aef9bcd9SKiyoung Kim * 10*aef9bcd9SKiyoung Kim * Unless required by applicable law or agreed to in writing, software 11*aef9bcd9SKiyoung Kim * distributed under the License is distributed on an "AS IS" BASIS, 12*aef9bcd9SKiyoung Kim * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13*aef9bcd9SKiyoung Kim * See the License for the specific language governing permissions and 14*aef9bcd9SKiyoung Kim * limitations under the License. 15*aef9bcd9SKiyoung Kim */ 16*aef9bcd9SKiyoung Kim 17*aef9bcd9SKiyoung Kim #ifndef _LDACBT_H_ 18*aef9bcd9SKiyoung Kim #define _LDACBT_H_ 19*aef9bcd9SKiyoung Kim #ifdef __cplusplus 20*aef9bcd9SKiyoung Kim extern "C" { 21*aef9bcd9SKiyoung Kim #endif 22*aef9bcd9SKiyoung Kim #ifndef LDACBT_API 23*aef9bcd9SKiyoung Kim #define LDACBT_API 24*aef9bcd9SKiyoung Kim #endif /* LDACBT_API */ 25*aef9bcd9SKiyoung Kim 26*aef9bcd9SKiyoung Kim /* This file contains the definitions, declarations and macros for an implimentation of 27*aef9bcd9SKiyoung Kim * LDAC encode processing. 28*aef9bcd9SKiyoung Kim * 29*aef9bcd9SKiyoung Kim * The basic flow of the encode processing is as follows: 30*aef9bcd9SKiyoung Kim * - The program creates an handle of an LDAC api using ldacBT_get_handle(). 31*aef9bcd9SKiyoung Kim * - The program initialize the handle for encode using ldacBT_init_handle_encode(). 32*aef9bcd9SKiyoung Kim * - The program calls ldacBT_encode() to encode data. 33*aef9bcd9SKiyoung Kim * - If the program demands to control the Encode Quality Mode Index, then one of the following 34*aef9bcd9SKiyoung Kim * should be called: 35*aef9bcd9SKiyoung Kim * - ldacBT_set_eqmid() 36*aef9bcd9SKiyoung Kim * - ldacBT_alter_eqmid() 37*aef9bcd9SKiyoung Kim * - The program finishes the encoding with passing NULL to input pcm buffer for ldacBT_encode(), 38*aef9bcd9SKiyoung Kim * which enables the encoder to encode remaining data in its input buffers. 39*aef9bcd9SKiyoung Kim * - The handle may be closed using ldacBT_close_handle() then used again, or released with 40*aef9bcd9SKiyoung Kim * ldacBT_free_handle(). 41*aef9bcd9SKiyoung Kim * - The rest of the set functions should be called only if it is needed by the client. 42*aef9bcd9SKiyoung Kim * 43*aef9bcd9SKiyoung Kim * 44*aef9bcd9SKiyoung Kim * Note for an implimentation 45*aef9bcd9SKiyoung Kim * - Error processing 46*aef9bcd9SKiyoung Kim * When continuous processing for next frame is performed after error detection, following 47*aef9bcd9SKiyoung Kim * processing must be carried out using C function provided in the library. 48*aef9bcd9SKiyoung Kim * - Release of internal variables in encode processing using ldacBT_close_handle(). 49*aef9bcd9SKiyoung Kim * - Allocation and initialization of internal variables in encode processing using 50*aef9bcd9SKiyoung Kim * ldacBT_init_handle_encode(). 51*aef9bcd9SKiyoung Kim * Note that the encoded output for a few frames will not be present just after error recovery. 52*aef9bcd9SKiyoung Kim * 53*aef9bcd9SKiyoung Kim * - Resuming of the encode processing from an interruption 54*aef9bcd9SKiyoung Kim * In case of resuming of the encode processing from interruption (such as changing 55*aef9bcd9SKiyoung Kim * configuration, seeking and playback), initialization of internal variables in encode 56*aef9bcd9SKiyoung Kim * processing must be carried out as error processing described above. 57*aef9bcd9SKiyoung Kim * Note that the encoded output for a few frames will not be present just after initialization 58*aef9bcd9SKiyoung Kim * as above. 59*aef9bcd9SKiyoung Kim * 60*aef9bcd9SKiyoung Kim * 61*aef9bcd9SKiyoung Kim * Glossary 62*aef9bcd9SKiyoung Kim * channel_config_index (cci) 63*aef9bcd9SKiyoung Kim * The channel setting information for ldaclib. 64*aef9bcd9SKiyoung Kim * See ldacBT_cm_to_cci() to get value from channel_mode. 65*aef9bcd9SKiyoung Kim * 66*aef9bcd9SKiyoung Kim * channel_mode (cm) 67*aef9bcd9SKiyoung Kim * The channel setting information for LDAC specification of Bluetooth A2DP. 68*aef9bcd9SKiyoung Kim * See ldacBT_cci_to_cm() to get value from channel_config_index. 69*aef9bcd9SKiyoung Kim * 70*aef9bcd9SKiyoung Kim * ldac_transport_frame 71*aef9bcd9SKiyoung Kim * See LDAC specification of bluetooth A2DP. 72*aef9bcd9SKiyoung Kim * 73*aef9bcd9SKiyoung Kim * Maximum Transmission Unit (MTU) 74*aef9bcd9SKiyoung Kim * The minimum MTU that a L2CAP implementation for LDAC shall support is 679 bytes, because LDAC 75*aef9bcd9SKiyoung Kim * is optimized with 2-DH5 packet as its target. 76*aef9bcd9SKiyoung Kim * 77*aef9bcd9SKiyoung Kim * frame 78*aef9bcd9SKiyoung Kim * An audio signal sequence representing a certain number of PCM audio signals. 79*aef9bcd9SKiyoung Kim * Encoding and decoding are processed frame by frame in LDAC. Number of samples in a frame is 80*aef9bcd9SKiyoung Kim * determined by sampling frequency as described below. 81*aef9bcd9SKiyoung Kim * 82*aef9bcd9SKiyoung Kim * Sampling frequency and frame sample. 83*aef9bcd9SKiyoung Kim * Supported sampling frequencies are 44.1, 48, 88.2 and 96 kHz. 84*aef9bcd9SKiyoung Kim * The relationship between sampling frequency and frame sample in LDAC are shown below. 85*aef9bcd9SKiyoung Kim * -------------------------------------------------------- 86*aef9bcd9SKiyoung Kim * | sampling frequency [kHz] | 44.1 | 48 | 88.2 | 96 | 87*aef9bcd9SKiyoung Kim * | frame sample [samples/channel] | 128 | 256 | 88*aef9bcd9SKiyoung Kim * -------------------------------------------------------- 89*aef9bcd9SKiyoung Kim * Though the frame size varies in LDAC core as described in the table, the number of samples in 90*aef9bcd9SKiyoung Kim * input PCM signal for encoding is fixed to 128 sample/channel, and it is not affected by 91*aef9bcd9SKiyoung Kim * sampling frequency. 92*aef9bcd9SKiyoung Kim */ 93*aef9bcd9SKiyoung Kim #define LDACBT_ENC_LSU 128 94*aef9bcd9SKiyoung Kim #define LDACBT_MAX_LSU 512 95*aef9bcd9SKiyoung Kim 96*aef9bcd9SKiyoung Kim /* channel_config_index. 97*aef9bcd9SKiyoung Kim * Supported value are below. 98*aef9bcd9SKiyoung Kim */ 99*aef9bcd9SKiyoung Kim #define LDAC_CCI_MONO 0 /* MONO */ 100*aef9bcd9SKiyoung Kim #define LDAC_CCI_DUAL_CHANNEL 1 /* DUAL CHANNEL */ 101*aef9bcd9SKiyoung Kim #define LDAC_CCI_STEREO 2 /* STEREO */ 102*aef9bcd9SKiyoung Kim 103*aef9bcd9SKiyoung Kim /* PCM format. 104*aef9bcd9SKiyoung Kim * Supported PCM format are shown below. 105*aef9bcd9SKiyoung Kim * - LDACBT_SMPL_FMT_S16 : signed 16bits little endian. 106*aef9bcd9SKiyoung Kim * - LDACBT_SMPL_FMT_S24 : signed 24bits little endian. 107*aef9bcd9SKiyoung Kim * - LDACBT_SMPL_FMT_S32 : signed 32bits little endian. 108*aef9bcd9SKiyoung Kim * - LDACBT_SMPL_FMT_F32 : single-precision floating point. 109*aef9bcd9SKiyoung Kim * The data sequency must be interleaved format by 1 sample. 110*aef9bcd9SKiyoung Kim * Ex) 2 channel audio, the data sequences are aligned as below. 111*aef9bcd9SKiyoung Kim * seq : |L[0]|R[0]|L[1]|R[1]|... 112*aef9bcd9SKiyoung Kim */ 113*aef9bcd9SKiyoung Kim typedef enum { 114*aef9bcd9SKiyoung Kim LDACBT_SMPL_FMT_S16 = 0x2, 115*aef9bcd9SKiyoung Kim LDACBT_SMPL_FMT_S24 = 0x3, 116*aef9bcd9SKiyoung Kim LDACBT_SMPL_FMT_S32 = 0x4, 117*aef9bcd9SKiyoung Kim LDACBT_SMPL_FMT_F32 = 0x5, 118*aef9bcd9SKiyoung Kim } LDACBT_SMPL_FMT_T; 119*aef9bcd9SKiyoung Kim 120*aef9bcd9SKiyoung Kim /* Encode Quality Mode Index. (EQMID) 121*aef9bcd9SKiyoung Kim * The configuration of encoding in LDAC will be coordinated by "Encode Quality Mode Index" 122*aef9bcd9SKiyoung Kim * parameter. Configurable values are shown below. 123*aef9bcd9SKiyoung Kim * - LDACBT_EQMID_HQ : Encode setting for High Quality. 124*aef9bcd9SKiyoung Kim * - LDACBT_EQMID_SQ : Encode setting for Standard Quality. 125*aef9bcd9SKiyoung Kim * - LDACBT_EQMID_MQ : Encode setting for Mobile use Quality. 126*aef9bcd9SKiyoung Kim * - LDACBT_EQMID_ABR: Reserved EQMID for ABR. The value shall be 0x7F. 127*aef9bcd9SKiyoung Kim */ 128*aef9bcd9SKiyoung Kim enum { 129*aef9bcd9SKiyoung Kim LDACBT_EQMID_HQ = 0, 130*aef9bcd9SKiyoung Kim LDACBT_EQMID_SQ, 131*aef9bcd9SKiyoung Kim LDACBT_EQMID_MQ, 132*aef9bcd9SKiyoung Kim LDACBT_EQMID_NUM, /* terminator */ 133*aef9bcd9SKiyoung Kim LDACBT_EQMID_ABR = 0x7F, 134*aef9bcd9SKiyoung Kim }; 135*aef9bcd9SKiyoung Kim 136*aef9bcd9SKiyoung Kim /* Bit rates 137*aef9bcd9SKiyoung Kim * Bit rates in each EQMID are depend on sampling frequency. 138*aef9bcd9SKiyoung Kim * In this API specification, these relations are shown below. 139*aef9bcd9SKiyoung Kim * ___________________________________________ 140*aef9bcd9SKiyoung Kim * | | Sampling Frequency[kHz] | 141*aef9bcd9SKiyoung Kim * | EQMID | 44.1, 88.2 | 48, 96 | 142*aef9bcd9SKiyoung Kim * +-----------------+------------+------------+ 143*aef9bcd9SKiyoung Kim * | LDACBT_EQMID_HQ | 909kbps | 990kbps | 144*aef9bcd9SKiyoung Kim * | LDACBT_EQMID_SQ | 606kbps | 660kbps | 145*aef9bcd9SKiyoung Kim * | LDACBT_EQMID_MQ | 303kbps | 330kbps | 146*aef9bcd9SKiyoung Kim * ------------------------------------------- 147*aef9bcd9SKiyoung Kim */ 148*aef9bcd9SKiyoung Kim 149*aef9bcd9SKiyoung Kim /* Maximum size of the "ldac_transport_frame" sequence at transportation. */ 150*aef9bcd9SKiyoung Kim #define LDACBT_MAX_NBYTES 1024 /* byte */ 151*aef9bcd9SKiyoung Kim 152*aef9bcd9SKiyoung Kim /* Maximum number of channel for LDAC */ 153*aef9bcd9SKiyoung Kim #define LDAC_PRCNCH 2 154*aef9bcd9SKiyoung Kim 155*aef9bcd9SKiyoung Kim /* LDAC handle type */ 156*aef9bcd9SKiyoung Kim typedef struct _st_ldacbt_handle * HANDLE_LDAC_BT; 157*aef9bcd9SKiyoung Kim 158*aef9bcd9SKiyoung Kim /* Allocation of LDAC handle. 159*aef9bcd9SKiyoung Kim * Format 160*aef9bcd9SKiyoung Kim * HANDLE_LDAC_BT ldacBT_get_handle( void ); 161*aef9bcd9SKiyoung Kim * Arguments 162*aef9bcd9SKiyoung Kim * None. 163*aef9bcd9SKiyoung Kim * Return value 164*aef9bcd9SKiyoung Kim * HANDLE_LDAC_BT for success, NULL for failure. 165*aef9bcd9SKiyoung Kim */ 166*aef9bcd9SKiyoung Kim LDACBT_API HANDLE_LDAC_BT ldacBT_get_handle( void ); 167*aef9bcd9SKiyoung Kim 168*aef9bcd9SKiyoung Kim /* Release of LDAC handle. 169*aef9bcd9SKiyoung Kim * Format 170*aef9bcd9SKiyoung Kim * void ldacBT_free_handle( HANDLE_LDAC_BT hLdacBt ); 171*aef9bcd9SKiyoung Kim * Arguments 172*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 173*aef9bcd9SKiyoung Kim * Return value 174*aef9bcd9SKiyoung Kim * None. 175*aef9bcd9SKiyoung Kim */ 176*aef9bcd9SKiyoung Kim LDACBT_API void ldacBT_free_handle( HANDLE_LDAC_BT hLdacBt ); 177*aef9bcd9SKiyoung Kim 178*aef9bcd9SKiyoung Kim /* Closing of initialized LDAC handle. 179*aef9bcd9SKiyoung Kim * Closed handle can be initialized and used again. 180*aef9bcd9SKiyoung Kim * Format 181*aef9bcd9SKiyoung Kim * void ldacBT_close_handle( HANDLE_LDAC_BT hLdacBt ); 182*aef9bcd9SKiyoung Kim * Arguments 183*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 184*aef9bcd9SKiyoung Kim * Return value 185*aef9bcd9SKiyoung Kim * None. 186*aef9bcd9SKiyoung Kim */ 187*aef9bcd9SKiyoung Kim LDACBT_API void ldacBT_close_handle( HANDLE_LDAC_BT hLdacBt ); 188*aef9bcd9SKiyoung Kim 189*aef9bcd9SKiyoung Kim /* Acquisition of the library version. 190*aef9bcd9SKiyoung Kim * Format 191*aef9bcd9SKiyoung Kim * int ldacBT_get_version( void ); 192*aef9bcd9SKiyoung Kim * Arguments 193*aef9bcd9SKiyoung Kim * None. 194*aef9bcd9SKiyoung Kim * Return value 195*aef9bcd9SKiyoung Kim * int : version number. 196*aef9bcd9SKiyoung Kim * 23-16 bit : major version 197*aef9bcd9SKiyoung Kim * 15- 8 bit : minor version 198*aef9bcd9SKiyoung Kim * 7- 0 bit : branch version 199*aef9bcd9SKiyoung Kim * Ex) 0x00010203 -> version 1.02.03 200*aef9bcd9SKiyoung Kim */ 201*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_get_version( void ); 202*aef9bcd9SKiyoung Kim 203*aef9bcd9SKiyoung Kim /* Acquisition of the sampling frequency in current configuration. 204*aef9bcd9SKiyoung Kim * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to 205*aef9bcd9SKiyoung Kim * calling this function. 206*aef9bcd9SKiyoung Kim * Format 207*aef9bcd9SKiyoung Kim * int ldacBT_get_sampling_freq( HANDLE_LDAC_BT hLdacBt ); 208*aef9bcd9SKiyoung Kim * Arguments 209*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 210*aef9bcd9SKiyoung Kim * Return value 211*aef9bcd9SKiyoung Kim * int : sampling frequency in current configuration. -1 for failure. 212*aef9bcd9SKiyoung Kim */ 213*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_get_sampling_freq( HANDLE_LDAC_BT hLdacBt ); 214*aef9bcd9SKiyoung Kim 215*aef9bcd9SKiyoung Kim /* Acquisition of the Bit-rate. 216*aef9bcd9SKiyoung Kim * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to 217*aef9bcd9SKiyoung Kim * calling this function. 218*aef9bcd9SKiyoung Kim * Format 219*aef9bcd9SKiyoung Kim * int ldacBT_get_bitrate( HANDLE_LDAC_BT hLdacBt ); 220*aef9bcd9SKiyoung Kim * Arguments 221*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 222*aef9bcd9SKiyoung Kim * Return value 223*aef9bcd9SKiyoung Kim * int : Bit-rate for previously processed ldac_transport_frame for success. -1 for failure. 224*aef9bcd9SKiyoung Kim */ 225*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_get_bitrate( HANDLE_LDAC_BT hLdacBt ); 226*aef9bcd9SKiyoung Kim 227*aef9bcd9SKiyoung Kim /* Initialization of a LDAC handle for encode processing. 228*aef9bcd9SKiyoung Kim * The LDAC handle must be allocated by API function ldacBT_get_handle() prior to calling this API. 229*aef9bcd9SKiyoung Kim * "mtu" value should be configured to MTU size of AVDTP Transport Channel, which is determined by 230*aef9bcd9SKiyoung Kim * SRC and SNK devices in Bluetooth transmission. 231*aef9bcd9SKiyoung Kim * "eqmid" is configured to desired value of "Encode Quality Mode Index". 232*aef9bcd9SKiyoung Kim * "cm" is configured to channel_mode in LDAC, which is determined by SRC and SNK devices in 233*aef9bcd9SKiyoung Kim * Bluetooth transmission. 234*aef9bcd9SKiyoung Kim * "fmt" is configured to input pcm audio format. 235*aef9bcd9SKiyoung Kim * When the configuration of "mtu", "cm", or "sf" changed, the re-initialization is required. 236*aef9bcd9SKiyoung Kim * 237*aef9bcd9SKiyoung Kim * Format 238*aef9bcd9SKiyoung Kim * int ldacBT_init_handle_encode( HANDLE_LDAC_BT hLdacBt, int mtu, int eqmid, int cm, 239*aef9bcd9SKiyoung Kim * LDACBT_SMPL_FMT_T fmt, int sf ); 240*aef9bcd9SKiyoung Kim * Arguments 241*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 242*aef9bcd9SKiyoung Kim * mtu int MTU value. Unit:Byte. 243*aef9bcd9SKiyoung Kim * eqmid int Encode Quality Mode Index. 244*aef9bcd9SKiyoung Kim * cm int Information of the channel_mode. 245*aef9bcd9SKiyoung Kim * fmt LDACBT_SMPL_FMT_T Audio format type of input pcm. 246*aef9bcd9SKiyoung Kim * sf int Sampling frequency of input pcm. 247*aef9bcd9SKiyoung Kim * Return value 248*aef9bcd9SKiyoung Kim * int : 0 for success, -1 for failure. 249*aef9bcd9SKiyoung Kim */ 250*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_init_handle_encode( HANDLE_LDAC_BT hLdacBt, int mtu, int eqmid, int cm, 251*aef9bcd9SKiyoung Kim LDACBT_SMPL_FMT_T fmt, int sf ); 252*aef9bcd9SKiyoung Kim 253*aef9bcd9SKiyoung Kim /* Configuration of Encode Quality Mode Index. 254*aef9bcd9SKiyoung Kim * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to 255*aef9bcd9SKiyoung Kim * calling this function. 256*aef9bcd9SKiyoung Kim * The API function can be called at any time, after the completion of initializing. 257*aef9bcd9SKiyoung Kim * Format 258*aef9bcd9SKiyoung Kim * int ldacBT_set_eqmid( HANDLE_LDAC_BT hLdacBt, int eqmid ); 259*aef9bcd9SKiyoung Kim * Arguments 260*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 261*aef9bcd9SKiyoung Kim * eqmid int Encode Quality Mode Index. 262*aef9bcd9SKiyoung Kim * Return value 263*aef9bcd9SKiyoung Kim * int : 0 for success, -1 for failure. 264*aef9bcd9SKiyoung Kim */ 265*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_set_eqmid( HANDLE_LDAC_BT hLdacBt, int eqmid ); 266*aef9bcd9SKiyoung Kim 267*aef9bcd9SKiyoung Kim /* Acquisition of prescribed Encode Quality Mode Index in current configuration. 268*aef9bcd9SKiyoung Kim * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to 269*aef9bcd9SKiyoung Kim * calling this function. 270*aef9bcd9SKiyoung Kim * Format 271*aef9bcd9SKiyoung Kim * int ldacBT_get_eqmid( HANDLE_LDAC_BT hLdacBt ); 272*aef9bcd9SKiyoung Kim * Arguments 273*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 274*aef9bcd9SKiyoung Kim * Return value 275*aef9bcd9SKiyoung Kim * int : Encode Quality Mode Index for success, -1 for failure. 276*aef9bcd9SKiyoung Kim */ 277*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_get_eqmid( HANDLE_LDAC_BT hLdacBt ); 278*aef9bcd9SKiyoung Kim 279*aef9bcd9SKiyoung Kim /* Changing of configuration for Encode Quality Mode Index by one step. 280*aef9bcd9SKiyoung Kim * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to 281*aef9bcd9SKiyoung Kim * calling this function. 282*aef9bcd9SKiyoung Kim * Configuralbe values for "priority" are shown below. 283*aef9bcd9SKiyoung Kim * - LDACBT_EQMID_INC_QUALITY : Adjustment for EQMID by one step for the direction of 284*aef9bcd9SKiyoung Kim * getting close to LDACBT_EQMID_HQ. 285*aef9bcd9SKiyoung Kim * - LDACBT_EQMID_INC_CONNECTION : Adjustment for EQMID by one step for the direction of 286*aef9bcd9SKiyoung Kim * getting away from LDACBT_EQMID_HQ. 287*aef9bcd9SKiyoung Kim * For restoring prescribed value for "Encode Quality Mode Index", it must be configured again by 288*aef9bcd9SKiyoung Kim * API function ldacBT_init_handle_encode() or ldacBT_set_qmode(). 289*aef9bcd9SKiyoung Kim * A transition to the state other than "Encode Quality Mode Index" mention before may be occurred 290*aef9bcd9SKiyoung Kim * caused by an adjustment using this API function. 291*aef9bcd9SKiyoung Kim * The API function can be called at any time, after the completion of initializing. 292*aef9bcd9SKiyoung Kim * Format 293*aef9bcd9SKiyoung Kim * int ldacBT_alter_eqmid_priority( HANDLE_LDAC_BT hLdacBt, int priority ); 294*aef9bcd9SKiyoung Kim * Arguments 295*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 296*aef9bcd9SKiyoung Kim * priority int The direction of changing EQMID. 297*aef9bcd9SKiyoung Kim * Return value 298*aef9bcd9SKiyoung Kim * int : 0 for success, -1 for failure. 299*aef9bcd9SKiyoung Kim */ 300*aef9bcd9SKiyoung Kim #define LDACBT_EQMID_INC_QUALITY 1 301*aef9bcd9SKiyoung Kim #define LDACBT_EQMID_INC_CONNECTION -1 302*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_alter_eqmid_priority( HANDLE_LDAC_BT hLdacBt, int priority ); 303*aef9bcd9SKiyoung Kim 304*aef9bcd9SKiyoung Kim 305*aef9bcd9SKiyoung Kim /* LDAC encode processing. 306*aef9bcd9SKiyoung Kim * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to calling 307*aef9bcd9SKiyoung Kim * this API function. 308*aef9bcd9SKiyoung Kim * <Regarding on a input PCM signal> 309*aef9bcd9SKiyoung Kim * Number of samples in input PCM signal for encoding is fixed to 128 samples per channel, and it 310*aef9bcd9SKiyoung Kim * is not affected by sampling frequency. 311*aef9bcd9SKiyoung Kim * 312*aef9bcd9SKiyoung Kim * The region in input signal buffer without any PCM signal must be filled with zero, if the 313*aef9bcd9SKiyoung Kim * number of samples is less than 128 samples. 314*aef9bcd9SKiyoung Kim * 315*aef9bcd9SKiyoung Kim * The format of PCM signal is determined by "fmt" configured by API function 316*aef9bcd9SKiyoung Kim * ldacBT_init_handle_encode(). 317*aef9bcd9SKiyoung Kim * 318*aef9bcd9SKiyoung Kim * Total size of referenced PCM signal (in byte) will be set in "pcm_used" on return. The value of 319*aef9bcd9SKiyoung Kim * "Number of input samples * Number of channels * sizeof(PCM word length)" will be set in normal. 320*aef9bcd9SKiyoung Kim * 321*aef9bcd9SKiyoung Kim * Finalize processing of encode will be carried out with setting "p_pcm" as zero. 322*aef9bcd9SKiyoung Kim * 323*aef9bcd9SKiyoung Kim * <Regarding on output encoded data> 324*aef9bcd9SKiyoung Kim * An output data in "ldac_transport_frame" sequence will be set to "p_stream" after several frame 325*aef9bcd9SKiyoung Kim * processing. So the output is not necessarily present at each calling of this API function. 326*aef9bcd9SKiyoung Kim * 327*aef9bcd9SKiyoung Kim * The presence of the output can be verified by checking whether the value of "stream_wrote", 328*aef9bcd9SKiyoung Kim * representing the number of written bytes for "p_stream", is positive or not. 329*aef9bcd9SKiyoung Kim * 330*aef9bcd9SKiyoung Kim * In addition, encoded data size for output will be determined by the value of "mtu" configured 331*aef9bcd9SKiyoung Kim * by API function ldacBT_init_handle_encode(). 332*aef9bcd9SKiyoung Kim * 333*aef9bcd9SKiyoung Kim * The number of "ldac_transport_frame" corresponding to "ldac_transport_frame" sequence as output 334*aef9bcd9SKiyoung Kim * will be set to "frame_num". 335*aef9bcd9SKiyoung Kim * 336*aef9bcd9SKiyoung Kim * Format 337*aef9bcd9SKiyoung Kim * int ldacBT_encode( HANDLE_LDAC_BT hLdacBt, void *p_pcm, int *pcm_used, 338*aef9bcd9SKiyoung Kim * unsigned char *p_stream, int *stream_sz, int *frame_num ); 339*aef9bcd9SKiyoung Kim * Arguments 340*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 341*aef9bcd9SKiyoung Kim * p_pcm void * Input PCM signal sequence 342*aef9bcd9SKiyoung Kim * pcm_used int * Data size of referenced PCM singnal. Unit:Byte. 343*aef9bcd9SKiyoung Kim * p_stream unsigned char * Output "ldac_transport_frame" sequence. 344*aef9bcd9SKiyoung Kim * stream_sz int * Size of output data. Unit:Byte. 345*aef9bcd9SKiyoung Kim * frame_num int * Number of output "ldac_transport_frame" 346*aef9bcd9SKiyoung Kim * Return value 347*aef9bcd9SKiyoung Kim * int : 0 for success, -1 for failure. 348*aef9bcd9SKiyoung Kim */ 349*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_encode( HANDLE_LDAC_BT hLdacBt, void *p_pcm, int *pcm_used, 350*aef9bcd9SKiyoung Kim unsigned char *p_stream, int *stream_sz, int *frame_num ); 351*aef9bcd9SKiyoung Kim 352*aef9bcd9SKiyoung Kim /* Acquisition of previously established error code. 353*aef9bcd9SKiyoung Kim * The LDAC handle must be allocated by API function ldacBT_get_handle() prior to calling this function. 354*aef9bcd9SKiyoung Kim * The details of error code are described below at the end of this header file. 355*aef9bcd9SKiyoung Kim * Tips for error code handling. 356*aef9bcd9SKiyoung Kim * The macro function LDACBT_FATAL() is useful to determine whether the error code is Fatal or not. 357*aef9bcd9SKiyoung Kim * Ex.) if( LDACBT_FATAL(err) ) // Fatal Error occurred. 358*aef9bcd9SKiyoung Kim * 359*aef9bcd9SKiyoung Kim * The macro function LDACBT_ERROR() is useful to determine whether the error occurred or not. 360*aef9bcd9SKiyoung Kim * Ex.) if( LDACBT_ERROR(err) ) // Error occurred. 361*aef9bcd9SKiyoung Kim * 362*aef9bcd9SKiyoung Kim * The macro function LDACBT_HANDLE_ERR() is useful to get the handle level error code. 363*aef9bcd9SKiyoung Kim * Ex.) err_handle_lv = LDACBT_HANDLE_ERR(err); 364*aef9bcd9SKiyoung Kim * 365*aef9bcd9SKiyoung Kim * The macro function LDACBT_BLOCK_ERR() is useful to get the block level error code. 366*aef9bcd9SKiyoung Kim * Ex.) err_block_lv = LDACBT_BLOCK_ERR(err); 367*aef9bcd9SKiyoung Kim * 368*aef9bcd9SKiyoung Kim * Format 369*aef9bcd9SKiyoung Kim * int ldacBT_get_error_code( HANDLE_LDAC_BT hLdacBt ); 370*aef9bcd9SKiyoung Kim * Arguments 371*aef9bcd9SKiyoung Kim * hLdacBt HANDLE_LDAC_BT LDAC handle. 372*aef9bcd9SKiyoung Kim * Return value 373*aef9bcd9SKiyoung Kim * int : Error code. 374*aef9bcd9SKiyoung Kim */ 375*aef9bcd9SKiyoung Kim LDACBT_API int ldacBT_get_error_code( HANDLE_LDAC_BT hLdacBt ); 376*aef9bcd9SKiyoung Kim 377*aef9bcd9SKiyoung Kim /******************************************************************************* 378*aef9bcd9SKiyoung Kim Error Code 379*aef9bcd9SKiyoung Kim *******************************************************************************/ 380*aef9bcd9SKiyoung Kim #define LDACBT_ERR_NONE 0 381*aef9bcd9SKiyoung Kim 382*aef9bcd9SKiyoung Kim /* Non Fatal Error ***********************************************************/ 383*aef9bcd9SKiyoung Kim #define LDACBT_ERR_NON_FATAL 1 384*aef9bcd9SKiyoung Kim 385*aef9bcd9SKiyoung Kim /* Non Fatal Error (Block Level) *********************************************/ 386*aef9bcd9SKiyoung Kim #define LDACBT_ERR_BIT_ALLOCATION 5 387*aef9bcd9SKiyoung Kim 388*aef9bcd9SKiyoung Kim /* Non Fatal Error (Handle Level) ********************************************/ 389*aef9bcd9SKiyoung Kim #define LDACBT_ERR_NOT_IMPLEMENTED 128 390*aef9bcd9SKiyoung Kim #define LDACBT_ERR_NON_FATAL_ENCODE 132 391*aef9bcd9SKiyoung Kim 392*aef9bcd9SKiyoung Kim /* Fatal Error ***************************************************************/ 393*aef9bcd9SKiyoung Kim #define LDACBT_ERR_FATAL 256 394*aef9bcd9SKiyoung Kim 395*aef9bcd9SKiyoung Kim /* Fatal Error (Block Level) *************************************************/ 396*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_BAND 260 397*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_GRAD_A 261 398*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_GRAD_B 262 399*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_GRAD_C 263 400*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_GRAD_D 264 401*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_GRAD_E 265 402*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_IDSF 266 403*aef9bcd9SKiyoung Kim #define LDACBT_ERR_SYNTAX_SPEC 267 404*aef9bcd9SKiyoung Kim 405*aef9bcd9SKiyoung Kim #define LDACBT_ERR_BIT_PACKING 280 406*aef9bcd9SKiyoung Kim 407*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ALLOC_MEMORY 300 408*aef9bcd9SKiyoung Kim 409*aef9bcd9SKiyoung Kim /* Fatal Error (Handle Level) ************************************************/ 410*aef9bcd9SKiyoung Kim #define LDACBT_ERR_FATAL_HANDLE 512 411*aef9bcd9SKiyoung Kim 412*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_SYNCWORD 516 413*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_SMPL_FORMAT 517 414*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_PARAM 518 415*aef9bcd9SKiyoung Kim 416*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_SAMPLING_FREQ 530 417*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_SUP_SAMPLING_FREQ 531 418*aef9bcd9SKiyoung Kim #define LDACBT_ERR_CHECK_SAMPLING_FREQ 532 419*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_CHANNEL_CONFIG 533 420*aef9bcd9SKiyoung Kim #define LDACBT_ERR_CHECK_CHANNEL_CONFIG 534 421*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_FRAME_LENGTH 535 422*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_SUP_FRAME_LENGTH 536 423*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_FRAME_STATUS 537 424*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_NSHIFT 538 425*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ASSERT_CHANNEL_MODE 539 426*aef9bcd9SKiyoung Kim 427*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_INIT_ALLOC 550 428*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_ILL_GRADMODE 551 429*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_ILL_GRADPAR_A 552 430*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_ILL_GRADPAR_B 553 431*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_ILL_GRADPAR_C 554 432*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_ILL_GRADPAR_D 555 433*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ENC_ILL_NBANDS 556 434*aef9bcd9SKiyoung Kim #define LDACBT_ERR_PACK_BLOCK_FAILED 557 435*aef9bcd9SKiyoung Kim 436*aef9bcd9SKiyoung Kim #define LDACBT_ERR_DEC_INIT_ALLOC 570 437*aef9bcd9SKiyoung Kim #define LDACBT_ERR_INPUT_BUFFER_SIZE 571 438*aef9bcd9SKiyoung Kim #define LDACBT_ERR_UNPACK_BLOCK_FAILED 572 439*aef9bcd9SKiyoung Kim #define LDACBT_ERR_UNPACK_BLOCK_ALIGN 573 440*aef9bcd9SKiyoung Kim #define LDACBT_ERR_UNPACK_FRAME_ALIGN 574 441*aef9bcd9SKiyoung Kim #define LDACBT_ERR_FRAME_LENGTH_OVER 575 442*aef9bcd9SKiyoung Kim #define LDACBT_ERR_FRAME_ALIGN_OVER 576 443*aef9bcd9SKiyoung Kim 444*aef9bcd9SKiyoung Kim 445*aef9bcd9SKiyoung Kim /* LDAC API for Encode */ 446*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ALTER_EQMID_LIMITED 21 447*aef9bcd9SKiyoung Kim #define LDACBT_ERR_HANDLE_NOT_INIT 1000 448*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_EQMID 1024 449*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_SAMPLING_FREQ 1025 450*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_NUM_CHANNEL 1026 451*aef9bcd9SKiyoung Kim #define LDACBT_ERR_ILL_MTU_SIZE 1027 452*aef9bcd9SKiyoung Kim /* LDAC API for Decode */ 453*aef9bcd9SKiyoung Kim #define LDACBT_ERR_DEC_CONFIG_UPDATED 40 454*aef9bcd9SKiyoung Kim 455*aef9bcd9SKiyoung Kim 456*aef9bcd9SKiyoung Kim /* Macro Functions for Error Code ********************************************/ 457*aef9bcd9SKiyoung Kim #define LDACBT_API_ERR(err) ((err >> 20) & 0x0FFF) 458*aef9bcd9SKiyoung Kim #define LDACBT_HANDLE_ERR(err) ((err >> 10) & 0x03FF) 459*aef9bcd9SKiyoung Kim #define LDACBT_BLOCK_ERR(err) ( err & 0x03FF) 460*aef9bcd9SKiyoung Kim #define LDACBT_ERROR(err) ((LDACBT_ERR_NON_FATAL) <= LDACBT_API_ERR(err) ? 1 : 0) 461*aef9bcd9SKiyoung Kim #define LDACBT_FATAL(err) ((LDACBT_ERR_FATAL) <= LDACBT_API_ERR(err) ? 1 : 0) 462*aef9bcd9SKiyoung Kim 463*aef9bcd9SKiyoung Kim 464*aef9bcd9SKiyoung Kim 465*aef9bcd9SKiyoung Kim /* Codec Specific Information Elements for LDAC 466*aef9bcd9SKiyoung Kim * (based on "LDAC Specification of Bluetooth A2DP Rev.2.0.1") 467*aef9bcd9SKiyoung Kim * | 7 | 6 | 5 | 4 | 3 | 2 | 1 | 0 | 468*aef9bcd9SKiyoung Kim * service_caps[4] | SONY ID | Octet0 469*aef9bcd9SKiyoung Kim * service_caps[5] | SONY ID | Octet1 470*aef9bcd9SKiyoung Kim * service_caps[6] | SONY ID | Octet2 471*aef9bcd9SKiyoung Kim * service_caps[7] | SONY ID | Octet3 472*aef9bcd9SKiyoung Kim * service_caps[8] | SONY Specific Codec ID | Octet4 473*aef9bcd9SKiyoung Kim * service_caps[9] | SONY Specific Codec ID | Octet5 474*aef9bcd9SKiyoung Kim * service_caps[A] | RFA | Sampling Frequency | Octet6 475*aef9bcd9SKiyoung Kim * service_caps[B] | RFA | Channel Mode ID | Octet7 476*aef9bcd9SKiyoung Kim */ 477*aef9bcd9SKiyoung Kim #define LDACBT_MEDIA_CODEC_SC_SZ (10+2) 478*aef9bcd9SKiyoung Kim 479*aef9bcd9SKiyoung Kim /* [Octet 0-3] Vendor ID for SONY */ 480*aef9bcd9SKiyoung Kim #define LDACBT_VENDOR_ID0 0x2D 481*aef9bcd9SKiyoung Kim #define LDACBT_VENDOR_ID1 0x01 482*aef9bcd9SKiyoung Kim #define LDACBT_VENDOR_ID2 0x0 483*aef9bcd9SKiyoung Kim #define LDACBT_VENDOR_ID3 0x0 484*aef9bcd9SKiyoung Kim 485*aef9bcd9SKiyoung Kim /* [Octet 4-5] Vendor Specific A2DP Codec ID for LDAC */ 486*aef9bcd9SKiyoung Kim #define LDACBT_CODEC_ID0 0xAA 487*aef9bcd9SKiyoung Kim #define LDACBT_CODEC_ID1 0x00 488*aef9bcd9SKiyoung Kim 489*aef9bcd9SKiyoung Kim /* [Octet 6] 490*aef9bcd9SKiyoung Kim * [b7,b6] : RFA 491*aef9bcd9SKiyoung Kim * Reserved for future additions. 492*aef9bcd9SKiyoung Kim * Bits with this designation shall be set to zero. 493*aef9bcd9SKiyoung Kim * Receivers shall ignore these bits. 494*aef9bcd9SKiyoung Kim * ----------------------------------------------------- 495*aef9bcd9SKiyoung Kim * [b5-b0] : Sampling frequency and its associated bit field in LDAC are shown below. 496*aef9bcd9SKiyoung Kim * | 5 | 4 | 3 | 2 | 1 | 0 | 497*aef9bcd9SKiyoung Kim * | o | | | | | | 44100 498*aef9bcd9SKiyoung Kim * | | o | | | | | 48000 499*aef9bcd9SKiyoung Kim * | | | o | | | | 88200 500*aef9bcd9SKiyoung Kim * | | | | o | | | 96000 501*aef9bcd9SKiyoung Kim * | | | | | o | | 176400 502*aef9bcd9SKiyoung Kim * | | | | | | o | 192000 503*aef9bcd9SKiyoung Kim * 504*aef9bcd9SKiyoung Kim */ 505*aef9bcd9SKiyoung Kim /* Support for 44.1kHz sampling frequency */ 506*aef9bcd9SKiyoung Kim #define LDACBT_SAMPLING_FREQ_044100 0x20 507*aef9bcd9SKiyoung Kim /* Support for 48kHz sampling frequency */ 508*aef9bcd9SKiyoung Kim #define LDACBT_SAMPLING_FREQ_048000 0x10 509*aef9bcd9SKiyoung Kim /* Support for 88.2kHz sampling frequency */ 510*aef9bcd9SKiyoung Kim #define LDACBT_SAMPLING_FREQ_088200 0x08 511*aef9bcd9SKiyoung Kim /* Support for 96kHz sampling frequency */ 512*aef9bcd9SKiyoung Kim #define LDACBT_SAMPLING_FREQ_096000 0x04 513*aef9bcd9SKiyoung Kim /* Support for 176.4kHz sampling frequency */ 514*aef9bcd9SKiyoung Kim #define LDACBT_SAMPLING_FREQ_176400 0x02 515*aef9bcd9SKiyoung Kim /* Support for 192kHz sampling frequency */ 516*aef9bcd9SKiyoung Kim #define LDACBT_SAMPLING_FREQ_192000 0x01 517*aef9bcd9SKiyoung Kim 518*aef9bcd9SKiyoung Kim /* [Octet 7] 519*aef9bcd9SKiyoung Kim * [b7-b3] : RFA 520*aef9bcd9SKiyoung Kim * Reserved for future additions. 521*aef9bcd9SKiyoung Kim * Bits with this designation shall be set to zero. 522*aef9bcd9SKiyoung Kim * Receivers shall ignore these bits. 523*aef9bcd9SKiyoung Kim * ------------------------------------------------------ 524*aef9bcd9SKiyoung Kim * [b2-b0] : Channel mode and its associated bit field in LDAC are shown below. 525*aef9bcd9SKiyoung Kim * | 2 | 1 | 0 | 526*aef9bcd9SKiyoung Kim * | o | | | MONO 527*aef9bcd9SKiyoung Kim * | | o | | DUAL CHANNEL 528*aef9bcd9SKiyoung Kim * | | | o | STEREO 529*aef9bcd9SKiyoung Kim */ 530*aef9bcd9SKiyoung Kim /* Support for MONO */ 531*aef9bcd9SKiyoung Kim #define LDACBT_CHANNEL_MODE_MONO 0x04 532*aef9bcd9SKiyoung Kim /* Support for DUAL CHANNEL */ 533*aef9bcd9SKiyoung Kim #define LDACBT_CHANNEL_MODE_DUAL_CHANNEL 0x02 534*aef9bcd9SKiyoung Kim /* Support for STEREO */ 535*aef9bcd9SKiyoung Kim #define LDACBT_CHANNEL_MODE_STEREO 0x01 536*aef9bcd9SKiyoung Kim 537*aef9bcd9SKiyoung Kim #ifdef __cplusplus 538*aef9bcd9SKiyoung Kim } 539*aef9bcd9SKiyoung Kim #endif 540*aef9bcd9SKiyoung Kim #endif /* _LDACBT_H_ */ 541