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