• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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  */
127 enum {
128     LDACBT_EQMID_HQ = 0,
129     LDACBT_EQMID_SQ,
130     LDACBT_EQMID_MQ,
131     LDACBT_EQMID_NUM,     /* terminater */
132 };
133 
134 /* Bit rates
135  *  Bit rates in each EQMID are depend on sampling frequency.
136  *  In this API specification, these relations are shown below.
137  *     ___________________________________________
138  *    |                 | Sampling Frequency[kHz] |
139  *    |      EQMID      | 44.1, 88.2 |   48, 96   |
140  *    +-----------------+------------+------------+
141  *    | LDACBT_EQMID_HQ |   909kbps  |   990kbps  |
142  *    | LDACBT_EQMID_SQ |   606kbps  |   660kbps  |
143  *    | LDACBT_EQMID_MQ |   303kbps  |   330kbps  |
144  *     -------------------------------------------
145  */
146 
147 /* Maximum size of the "ldac_transport_frame" sequence at transportation. */
148 #define LDACBT_MAX_NBYTES 1024 /* byte */
149 
150 /* Maximum number of channel for LDAC */
151 #define LDAC_PRCNCH 2
152 
153 /* LDAC handle type */
154 typedef struct _st_ldacbt_handle * HANDLE_LDAC_BT;
155 
156 /* Allocation of LDAC handle.
157  *  Format
158  *      HANDLE_LDAC_BT ldacBT_get_handle( void );
159  *  Arguments
160  *      None.
161  *  Return value
162  *      HANDLE_LDAC_BT for success, NULL for failure.
163  */
164 LDACBT_API HANDLE_LDAC_BT ldacBT_get_handle( void );
165 
166 /* Release of LDAC handle.
167  *  Format
168  *      void ldacBT_free_handle( HANDLE_LDAC_BT hLdacBt );
169  *  Arguments
170  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
171  *  Return value
172  *      None.
173  */
174 LDACBT_API void ldacBT_free_handle( HANDLE_LDAC_BT hLdacBt );
175 
176 /* Closing of initialized LDAC handle.
177  * Closed handle can be initialized and used again.
178  *  Format
179  *      void ldacBT_close_handle( HANDLE_LDAC_BT hLdacBt );
180  *  Arguments
181  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
182  *  Return value
183  *      None.
184  */
185 LDACBT_API void ldacBT_close_handle( HANDLE_LDAC_BT hLdacBt );
186 
187 /* Acquisition of the library version.
188  *  Format
189  *      int  ldacBT_get_version( void );
190  *  Arguments
191  *      None.
192  *  Return value
193  *      int : version number.
194  *              23-16 bit : major version
195  *              15- 8 bit : minor version
196  *               7- 0 bit : branch version
197  *              Ex) 0x00010203 -> version 1.02.03
198  */
199 LDACBT_API int  ldacBT_get_version( void );
200 
201 /* Acquisition of the sampling frequency in current configuration.
202  * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to
203  * calling this function.
204  *  Format
205  *      int  ldacBT_get_sampling_freq( HANDLE_LDAC_BT hLdacBt );
206  *  Arguments
207  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
208  *  Return value
209  *      int : sampling frequency in current configuration. -1 for failure.
210  */
211 LDACBT_API int  ldacBT_get_sampling_freq( HANDLE_LDAC_BT hLdacBt );
212 
213 /* Acquisition of the Bit-rate.
214  * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to
215  * calling this function.
216  *  Format
217  *      int  ldacBT_get_bitrate( HANDLE_LDAC_BT hLdacBt );
218  *  Arguments
219  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
220  *  Return value
221  *      int : Bit-rate for previously processed ldac_transport_frame for success. -1 for failure.
222  */
223 LDACBT_API int  ldacBT_get_bitrate( HANDLE_LDAC_BT hLdacBt );
224 
225 /* Initialization of a LDAC handle for encode processing.
226  * The LDAC handle must be allocated by API function ldacBT_get_handle() prior to calling this API.
227  * "mtu" value should be configured to MTU size of AVDTP Transport Channel, which is determined by
228  * SRC and SNK devices in Bluetooth transmission.
229  * "eqmid" is configured to desired value of "Encode Quality Mode Index".
230  * "cm" is configured to channel_mode in LDAC, which is determined by SRC and SNK devices in
231  * Bluetooth transmission.
232  * "fmt" is configured to input pcm audio format.
233  * When the configuration of "mtu", "cm", or "sf" changed, the re-initialization is required.
234  *
235  *  Format
236  *      int  ldacBT_init_handle_encode( HANDLE_LDAC_BT hLdacBt, int mtu, int eqmid, int cm,
237  *                                      LDACBT_SMPL_FMT_T fmt, int sf );
238  *  Arguments
239  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
240  *      mtu        int               MTU value. Unit:Byte.
241  *      eqmid      int               Encode Quality Mode Index.
242  *      cm         int               Information of the channel_mode.
243  *      fmt        LDACBT_SMPL_FMT_T Audio format type of input pcm.
244  *      sf         int               Sampling frequency of input pcm.
245  *  Return value
246  *      int : 0 for success, -1 for failure.
247  */
248 LDACBT_API int  ldacBT_init_handle_encode( HANDLE_LDAC_BT hLdacBt, int mtu, int eqmid, int cm,
249                                            LDACBT_SMPL_FMT_T fmt, int sf );
250 
251 /* Configuration of Encode Quality Mode Index.
252  * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to
253  * calling this function.
254  * The API function can be called at any time, after the completion of initializing.
255  *  Format
256  *      int  ldacBT_set_eqmid( HANDLE_LDAC_BT hLdacBt, int eqmid );
257  *  Arguments
258  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
259  *      eqmid      int               Encode Quality Mode Index.
260  *  Return value
261  *      int : 0 for success, -1 for failure.
262  */
263 LDACBT_API int  ldacBT_set_eqmid( HANDLE_LDAC_BT hLdacBt, int eqmid );
264 
265 /* Acquisition of prescribed Encode Quality Mode Index in current configuration.
266  * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to
267  * calling this function.
268  *  Format
269  *      int  ldacBT_get_eqmid( HANDLE_LDAC_BT hLdacBt );
270  *  Arguments
271  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
272  *  Return value
273  *      int : Encode Quality Mode Index for success, -1 for failure.
274  */
275 LDACBT_API int  ldacBT_get_eqmid( HANDLE_LDAC_BT hLdacBt );
276 
277 /* Changing of configuration for Encode Quality Mode Index by one step.
278  * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to
279  * calling this function.
280  * Configuralbe values for "priority" are shown below.
281  *   - LDACBT_EQMID_INC_QUALITY    : Adjustment for EQMID by one step for the direction of
282  *                                   getting close to LDACBT_EQMID_HQ.
283  *   - LDACBT_EQMID_INC_CONNECTION : Adjustment for EQMID by one step for the direction of
284  *                                   getting away from LDACBT_EQMID_HQ.
285  * For restoring prescribed value for "Encode Quality Mode Index", it must be configured again by
286  * API function ldacBT_init_handle_encode() or ldacBT_set_qmode().
287  * A transition to the state other than "Encode Quality Mode Index" mention before may be occurred
288  * caused by an adjustment using this API function.
289  * The API function can be called at any time, after the completion of initializing.
290  *  Format
291  *      int  ldacBT_alter_eqmid_priority( HANDLE_LDAC_BT hLdacBt, int priority );
292  *  Arguments
293  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
294  *      priority   int               The direction of changing EQMID.
295  *  Return value
296  *      int : 0 for success, -1 for failure.
297  */
298 #define LDACBT_EQMID_INC_QUALITY     1
299 #define LDACBT_EQMID_INC_CONNECTION -1
300 LDACBT_API int  ldacBT_alter_eqmid_priority( HANDLE_LDAC_BT hLdacBt, int priority );
301 
302 
303 /* LDAC encode processing.
304  * The LDAC handle must be initialized by API function ldacBT_init_handle_encode() prior to calling
305  * this API function.
306  * <Regarding on a input PCM signal>
307  *  Number of samples in input PCM signal for encoding is fixed to 128 samples per channel, and it
308  *  is not affected by sampling frequency.
309  *
310  *  The region in input signal buffer without any PCM signal must be filled with zero, if the
311  *  number of samples is less than 128 samples.
312  *
313  *  The format of PCM signal is determined by "fmt" configured by API function
314  *  ldacBT_init_handle_encode().
315  *
316  *  Total size of referenced PCM signal (in byte) will be set in "pcm_used" on return. The value of
317  *  "Number of input samples * Number of channels * sizeof(PCM word length)" will be set in normal.
318  *
319  *  Finalize processing of encode will be carried out with setting "p_pcm" as zero.
320  *
321  * <Regarding on output encoded data>
322  *  An output data in "ldac_transport_frame" sequence will be set to "p_stream" after several frame
323  *  processing. So the output is not necessarily present at each calling of this API function.
324  *
325  *  The presence of the output can be verified by checking whether the value of "stream_wrote",
326  *  representing the number of written bytes for "p_stream", is positive or not.
327  *
328  *  In addition, encoded data size for output will be determined by the value of "mtu" configured
329  *  by API function ldacBT_init_handle_encode().
330  *
331  *  The number of "ldac_transport_frame" corresponding to "ldac_transport_frame" sequence as output
332  *  will be set to "frame_num".
333  *
334  *  Format
335  *      int  ldacBT_encode( HANDLE_LDAC_BT hLdacBt, void *p_pcm, int *pcm_used,
336  *                          unsigned char *p_stream, int *stream_sz, int *frame_num );
337  *  Arguments
338  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
339  *      p_pcm      void *            Input PCM signal sequence
340  *      pcm_used   int *             Data size of referenced PCM singnal. Unit:Byte.
341  *      p_stream   unsigned char *   Output "ldac_transport_frame" sequence.
342  *      stream_sz  int *             Size of output data. Unit:Byte.
343  *      frame_num  int *             Number of output "ldac_transport_frame"
344  *  Return value
345  *      int : 0 for success, -1 for failure.
346  */
347 LDACBT_API int  ldacBT_encode( HANDLE_LDAC_BT hLdacBt, void *p_pcm, int *pcm_used,
348                                unsigned char *p_stream, int *stream_sz, int *frame_num );
349 
350 /* Acquisition of previously established error code.
351  * The LDAC handle must be allocated by API function ldacBT_get_handle() prior to calling this function.
352  * The details of error code are described below at the end of this header file.
353  * Tips for error code handling.
354  * The macro function LDACBT_FATAL() is useful to determine whether the error code is Fatal or not.
355  *      Ex.) if( LDACBT_FATAL(err) ) // Fatal Error occurred.
356  *
357  * The macro function LDACBT_ERROR() is useful to determine whether the error occurred or not.
358  *      Ex.) if( LDACBT_ERROR(err) ) // Error occurred.
359  *
360  * The macro function LDACBT_HANDLE_ERR() is useful to get the handle level error code.
361  *      Ex.) err_handle_lv = LDACBT_HANDLE_ERR(err);
362  *
363  * The macro function LDACBT_BLOCK_ERR() is useful to get the block level error code.
364  *      Ex.) err_block_lv = LDACBT_BLOCK_ERR(err);
365  *
366  *  Format
367  *      int  ldacBT_get_error_code( HANDLE_LDAC_BT hLdacBt );
368  *  Arguments
369  *      hLdacBt    HANDLE_LDAC_BT    LDAC handle.
370  *  Return value
371  *      int : Error code.
372  */
373 LDACBT_API int  ldacBT_get_error_code( HANDLE_LDAC_BT hLdacBt );
374 
375 /*******************************************************************************
376     Error Code
377 *******************************************************************************/
378 #define LDACBT_ERR_NONE                     0
379 
380 /*    Non Fatal Error ***********************************************************/
381 #define LDACBT_ERR_NON_FATAL                1
382 
383 /*    Non Fatal Error (Block Level) *********************************************/
384 #define LDACBT_ERR_BIT_ALLOCATION           5
385 
386 /*    Non Fatal Error (Handle Level) ********************************************/
387 #define LDACBT_ERR_NOT_IMPLEMENTED          128
388 #define LDACBT_ERR_NON_FATAL_ENCODE         132
389 
390 /*    Fatal Error ***************************************************************/
391 #define LDACBT_ERR_FATAL                    256
392 
393 /*    Fatal Error (Block Level) *************************************************/
394 #define LDACBT_ERR_SYNTAX_BAND              260
395 #define LDACBT_ERR_SYNTAX_GRAD_A            261
396 #define LDACBT_ERR_SYNTAX_GRAD_B            262
397 #define LDACBT_ERR_SYNTAX_GRAD_C            263
398 #define LDACBT_ERR_SYNTAX_GRAD_D            264
399 #define LDACBT_ERR_SYNTAX_GRAD_E            265
400 #define LDACBT_ERR_SYNTAX_IDSF              266
401 #define LDACBT_ERR_SYNTAX_SPEC              267
402 
403 #define LDACBT_ERR_BIT_PACKING              280
404 
405 #define LDACBT_ERR_ALLOC_MEMORY             300
406 
407 /*    Fatal Error (Handle Level) ************************************************/
408 #define LDACBT_ERR_FATAL_HANDLE             512
409 
410 #define LDACBT_ERR_ILL_SYNCWORD             516
411 #define LDACBT_ERR_ILL_SMPL_FORMAT          517
412 #define LDACBT_ERR_ILL_PARAM                518
413 
414 #define LDACBT_ERR_ASSERT_SAMPLING_FREQ     530
415 #define LDACBT_ERR_ASSERT_SUP_SAMPLING_FREQ 531
416 #define LDACBT_ERR_CHECK_SAMPLING_FREQ      532
417 #define LDACBT_ERR_ASSERT_CHANNEL_CONFIG    533
418 #define LDACBT_ERR_CHECK_CHANNEL_CONFIG     534
419 #define LDACBT_ERR_ASSERT_FRAME_LENGTH      535
420 #define LDACBT_ERR_ASSERT_SUP_FRAME_LENGTH  536
421 #define LDACBT_ERR_ASSERT_FRAME_STATUS      537
422 #define LDACBT_ERR_ASSERT_NSHIFT            538
423 #define LDACBT_ERR_ASSERT_CHANNEL_MODE      539
424 
425 #define LDACBT_ERR_ENC_INIT_ALLOC           550
426 #define LDACBT_ERR_ENC_ILL_GRADMODE         551
427 #define LDACBT_ERR_ENC_ILL_GRADPAR_A        552
428 #define LDACBT_ERR_ENC_ILL_GRADPAR_B        553
429 #define LDACBT_ERR_ENC_ILL_GRADPAR_C        554
430 #define LDACBT_ERR_ENC_ILL_GRADPAR_D        555
431 #define LDACBT_ERR_ENC_ILL_NBANDS           556
432 #define LDACBT_ERR_PACK_BLOCK_FAILED        557
433 
434 #define LDACBT_ERR_DEC_INIT_ALLOC           570
435 #define LDACBT_ERR_INPUT_BUFFER_SIZE        571
436 #define LDACBT_ERR_UNPACK_BLOCK_FAILED      572
437 #define LDACBT_ERR_UNPACK_BLOCK_ALIGN       573
438 #define LDACBT_ERR_UNPACK_FRAME_ALIGN       574
439 #define LDACBT_ERR_FRAME_LENGTH_OVER        575
440 #define LDACBT_ERR_FRAME_ALIGN_OVER         576
441 
442 
443 /* LDAC API for Encode */
444 #define LDACBT_ERR_ALTER_EQMID_LIMITED      21
445 #define LDACBT_ERR_HANDLE_NOT_INIT          1000
446 #define LDACBT_ERR_ILL_EQMID                1024
447 #define LDACBT_ERR_ILL_SAMPLING_FREQ        1025
448 #define LDACBT_ERR_ILL_NUM_CHANNEL          1026
449 #define LDACBT_ERR_ILL_MTU_SIZE             1027
450 /* LDAC API for Decode */
451 #define LDACBT_ERR_DEC_CONFIG_UPDATED       40
452 
453 
454 /* Macro Functions for Error Code ********************************************/
455 #define LDACBT_API_ERR(err)    ((err >> 20) & 0x0FFF)
456 #define LDACBT_HANDLE_ERR(err) ((err >> 10) & 0x03FF)
457 #define LDACBT_BLOCK_ERR(err)  ( err & 0x03FF)
458 #define LDACBT_ERROR(err)      ((LDACBT_ERR_NON_FATAL) <= LDACBT_API_ERR(err) ? 1 : 0)
459 #define LDACBT_FATAL(err)      ((LDACBT_ERR_FATAL) <= LDACBT_API_ERR(err) ? 1 : 0)
460 
461 
462 
463 /* Codec Specific Information Elements for LDAC
464  * (based on "LDAC Specification of Bluetooth A2DP Rev.2.0.1")
465  *                  |  7  |  6  |  5  |  4  |  3  |  2  |  1  |  0  |
466  *  service_caps[4] |   SONY ID                                     | Octet0
467  *  service_caps[5] |   SONY ID                                     | Octet1
468  *  service_caps[6] |   SONY ID                                     | Octet2
469  *  service_caps[7] |   SONY ID                                     | Octet3
470  *  service_caps[8] |   SONY Specific Codec ID                      | Octet4
471  *  service_caps[9] |   SONY Specific Codec ID                      | Octet5
472  *  service_caps[A] |   RFA     |   Sampling Frequency              | Octet6
473  *  service_caps[B] |   RFA                       | Channel Mode ID | Octet7
474  */
475 #define LDACBT_MEDIA_CODEC_SC_SZ         (10+2)
476 
477 /* [Octet 0-3] Vendor ID for SONY */
478 #define LDACBT_VENDOR_ID0 0x2D
479 #define LDACBT_VENDOR_ID1 0x01
480 #define LDACBT_VENDOR_ID2 0x0
481 #define LDACBT_VENDOR_ID3 0x0
482 
483 /* [Octet 4-5] Vendor Specific A2DP Codec ID for LDAC */
484 #define LDACBT_CODEC_ID0 0xAA
485 #define LDACBT_CODEC_ID1 0x00
486 
487 /* [Octet 6]
488  * [b7,b6] : RFA
489  *       Reserved for future additions.
490  *       Bits with this designation shall be set to zero.
491  *       Receivers shall ignore these bits.
492  * -----------------------------------------------------
493  * [b5-b0] : Sampling frequency and its associated bit field in LDAC are shown below.
494  *    |  5  |  4  |  3  |  2  |  1  |  0  |
495  *    |  o  |     |     |     |     |     |  44100
496  *    |     |  o  |     |     |     |     |  48000
497  *    |     |     |  o  |     |     |     |  88200
498  *    |     |     |     |  o  |     |     |  96000
499  *    |     |     |     |     |  o  |     | 176400
500  *    |     |     |     |     |     |  o  | 192000
501  *
502  */
503 /* Support for 44.1kHz sampling frequency */
504 #define LDACBT_SAMPLING_FREQ_044100        0x20
505 /* Support for 48kHz sampling frequency */
506 #define LDACBT_SAMPLING_FREQ_048000        0x10
507 /* Support for 88.2kHz sampling frequency */
508 #define LDACBT_SAMPLING_FREQ_088200        0x08
509 /* Support for 96kHz sampling frequency */
510 #define LDACBT_SAMPLING_FREQ_096000        0x04
511 /* Support for 176.4kHz sampling frequency */
512 #define LDACBT_SAMPLING_FREQ_176400        0x02
513 /* Support for 192kHz sampling frequency */
514 #define LDACBT_SAMPLING_FREQ_192000        0x01
515 
516 /* [Octet 7]
517  * [b7-b3] : RFA
518  *       Reserved for future additions.
519  *       Bits with this designation shall be set to zero.
520  *       Receivers shall ignore these bits.
521  * ------------------------------------------------------
522  * [b2-b0] : Channel mode and its associated bit field in LDAC are shown below.
523  *    |  2  |  1  |  0  |
524  *    |  o  |     |     | MONO
525  *    |     |  o  |     | DUAL CHANNEL
526  *    |     |     |  o  | STEREO
527  */
528 /* Support for MONO */
529 #define LDACBT_CHANNEL_MODE_MONO           0x04
530 /* Support for DUAL CHANNEL */
531 #define LDACBT_CHANNEL_MODE_DUAL_CHANNEL   0x02
532 /* Support for STEREO */
533 #define LDACBT_CHANNEL_MODE_STEREO         0x01
534 
535 #ifdef __cplusplus
536 }
537 #endif
538 #endif /* _LDACBT_H_ */
539