| /* |
| * Copyright (C) 2013 - 2016 Sony 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. |
| */ |
| |
| #ifndef _LDACBT_INTERNAL_H_ |
| #define _LDACBT_INTERNAL_H_ |
| |
| #include <stdlib.h> |
| #include <string.h> |
| #include <stdint.h> |
| #include <unistd.h> |
| #include "struct_ldac.h" |
| |
| #ifdef __cplusplus |
| extern "C" { |
| #endif |
| |
| /* Function declaration */ |
| #define DECLFUNC static |
| |
| /* Limit for alter EQMID process */ |
| #define LDACBT_LIMIT_ALTER_EQMID_PRIORITY LDACBT_EQMID_MQ |
| |
| |
| #include "ldaclib.h" |
| #include "ldacBT.h" |
| #include "ldacBT_ex.h" |
| |
| /* macro value */ |
| /* The size of LDAC transport header. Unit:Byte. */ |
| #define LDACBT_FRMHDRBYTES LDAC_FRMHDRBYTES |
| /* The Maximum number of frames that can transrate in one packet.(LDAC A2DP spec) */ |
| #define LDACBT_NFRM_TX_MAX 15 |
| /* Lowest Common Multiple of (2,3,4)Bytes * 2ch * 256samples */ |
| #define LDACBT_ENC_PCM_BUF_SZ 6144 |
| /* The maximum pcm word length allowed. Unit:Byte */ |
| #define LDACBT_PCM_WLEN_MAX 4 |
| /* The size of LDACBT_TRANSPORT_FRM_BUF's buffer. Unit:Byte */ |
| #define LDACBT_ENC_STREAM_BUF_SZ 1024 |
| /* The size of rtp header and so on. Unit:Byte */ |
| /* = sizeof(struct rtp_header) + sizeof(struct rtp_payload) + 1 (scms-t). */ |
| #define LDACBT_TX_HEADER_SIZE 18 |
| /* The MTU size required for LDAC A2DP streaming. */ |
| #define LDACBT_MTU_REQUIRED 679 |
| #define LDACBT_MTU_3DH5 (990+LDACBT_TX_HEADER_SIZE) |
| |
| /* The state for alter operation */ |
| #define LDACBT_ALTER_OP__NON 0 |
| #define LDACBT_ALTER_OP__ACTIVE 1 |
| #define LDACBT_ALTER_OP__STANDBY 2 |
| #define LDACBT_ALTER_OP__FLASH 9 |
| |
| /* other */ |
| #ifndef LDACBT_S_OK |
| #define LDACBT_S_OK (0) |
| #endif |
| #ifndef LDACBT_E_FAIL |
| #define LDACBT_E_FAIL (-1) |
| #endif |
| #ifndef FALSE |
| #define FALSE 0 |
| #endif |
| #ifndef TRUE |
| #define TRUE 1 |
| #endif |
| #ifndef UNSET |
| #define UNSET -1 |
| #endif |
| #define LDACBT_GET_LDACLIB_ERROR_CODE 9999 |
| |
| /* The index for A2DP packets */ |
| enum { |
| ___DH1, ___DH3, ___DH5, /* basic rate */ |
| _2_DH1, _2_DH3, _2_DH5, /* EDR2M */ |
| _3_DH1, _3_DH3, _3_DH5, /* EDR3M */ |
| }; |
| |
| /* The state for LDACBT handle processing mode. */ |
| typedef enum { |
| LDACBT_PROCMODE_UNSET = -1, |
| LDACBT_PROCMODE_ENCODE = 1, |
| LDACBT_PROCMODE_DECODE = 2, |
| } LDACBT_PROCMODE; |
| |
| /* Structs */ |
| /* The structure for the property of EQMID. */ |
| typedef struct _st_ldacbt_eqmid_property |
| { |
| int eqmid; |
| char strModeName[4]; |
| int id_for_2DH5; |
| } LDACBT_EQMID_PROPERTY, * P_LDACBT_EQMID_PROPERTY; |
| |
| /* The structure for the configuration of LDAC. */ |
| typedef struct _st_ldacbt_config |
| { |
| int id; |
| int nfrm_in_pkt; /* number of ldac frame in packet */ |
| int frmlen; /* ldac frame length */ |
| int frmlen_1ch; /* ldac frame length per channel */ |
| } LDACBT_CONFIG, * P_LDACBT_CONFIG; |
| |
| /* The structure for the pcm information. */ |
| typedef struct _ldacbt_pcm_info { |
| int sf; /* sampling frequency */ |
| int ch; /* number of channel */ |
| int wl; |
| LDACBT_SMPL_FMT_T fmt; /* sample format */ |
| } LDACBT_PCM_INFO; |
| |
| /* The structure for the A2DP streaming. */ |
| typedef struct _ldacbt_tx_info { |
| int mtu; |
| int tx_size; /* size for ldac stream */ |
| int pkt_type; /* packet type */ |
| int pkt_hdr_sz; /* packet header size */ |
| int nfrm_in_pkt; /* number of ldac frame in packet */ |
| } LDACBT_TX_INFO; |
| /* The structure for the ldac_transport_frame sequence. */ |
| typedef struct _ldacbt_transport_frame_buf { |
| unsigned char buf[LDACBT_ENC_STREAM_BUF_SZ]; |
| int used; |
| int nfrm_in; |
| } LDACBT_TRANSPORT_FRM_BUF; |
| /* The structure of ring buffer for the input PCM. */ |
| typedef struct _ldacbt_pcm_ring_buf { |
| char buf[LDACBT_ENC_PCM_BUF_SZ]; |
| int wp; |
| int rp; |
| int nsmpl; |
| } LDACBT_PCM_RING_BUF; |
| |
| /* The LDACBT handle. */ |
| typedef struct _st_ldacbt_handle { |
| HANDLE_LDAC hLDAC; |
| LDACBT_PROCMODE proc_mode; |
| int error_code; |
| int error_code_api; |
| /* common */ |
| /* pcm */ |
| LDACBT_PCM_INFO pcm; |
| /* tx */ |
| LDACBT_TX_INFO tx; |
| /* ldaclib config */ |
| int frm_samples; /* frame samples */ |
| int sfid; /* sampling frequency index */ |
| int nshift; |
| int flg_encode_flushed; |
| int frm_status; |
| int frmlen; /* Frame Length */ |
| int frmlen_tx; /* Frame Length with transport header */ |
| int bitrate; |
| |
| int eqmid; /* Encode Quality Mode Index */ |
| /* for alter frame length */ |
| int tgt_eqmid; /* target Encode Quality Mode Index */ |
| int tgt_nfrm_in_pkt;/* target number of frame in packet */ |
| int tgt_frmlen; /* target frame length */ |
| int stat_alter_op; /* status of alter operation */ |
| |
| int cm; /* Channel Mode */ |
| int cci; /* Channel Config Index */ |
| int transport; /* Transport Stream ( with frame header) */ |
| /* buffer for "ldac_transport_frame" sequence */ |
| LDACBT_TRANSPORT_FRM_BUF ldac_trns_frm_buf; |
| /* buffer for input pcm */ |
| LDACBT_PCM_RING_BUF pcmring; |
| |
| /* work buffer for LDACLIB I/O */ |
| char **pp_pcm; |
| char *ap_pcm[LDAC_PRCNCH]; |
| char a_pcm[LDAC_PRCNCH * LDACBT_MAX_LSU * LDACBT_PCM_WLEN_MAX]; |
| } STRUCT_LDACBT_HANDLE; |
| |
| |
| |
| /* subfunctions */ |
| DECLFUNC void ldacBT_param_clear(HANDLE_LDAC_BT hLdacBT); |
| DECLFUNC int ldacBT_check_ldaclib_error_code(HANDLE_LDAC_BT hLdacBT); |
| DECLFUNC int ldacBT_assert_cm( int cm ); |
| DECLFUNC int ldacBT_assert_cci( int cci ); |
| DECLFUNC int ldacBT_assert_sample_format( LDACBT_SMPL_FMT_T fmt ); |
| DECLFUNC int ldacBT_assert_pcm_sampling_freq( int sf ); |
| DECLFUNC int ldacBT_assert_mtu( int mtu ); |
| DECLFUNC int ldacBT_assert_eqmid( int eqmid ); |
| DECLFUNC void ldacBT_set_eqmid_core( HANDLE_LDAC_BT hLdacBT, int eqmid ); |
| DECLFUNC void ldacBT_prepare_pcm_encode( void *pbuff, char **ap_pcm, int nsmpl, int nch, |
| LDACBT_SMPL_FMT_T fmt ); |
| DECLFUNC int ldacBT_frmlen_to_bitrate( int frmlen, int flgFrmHdr, int sf, int frame_samples ); |
| DECLFUNC int ldacBT_cm_to_cci( int cm ); |
| DECLFUNC int ldacBT_cci_to_cm( int cci ); |
| DECLFUNC int ldacBT_get_altered_eqmid ( HANDLE_LDAC_BT hLdacBT, int priority ); |
| DECLFUNC int ldacBT_get_eqmid_from_frmlen( int frmlen, int nch, int flgFrmHdr, int pktType ); |
| DECLFUNC int ldacBT_update_frmlen(HANDLE_LDAC_BT hLdacBT, int frmlen); |
| DECLFUNC P_LDACBT_EQMID_PROPERTY ldacBT_get_eqmid_conv_tbl ( int ldac_bt_mode ); |
| DECLFUNC P_LDACBT_CONFIG ldacBT_get_config( int ldac_bt_mode, int pkt_type ); |
| |
| #ifdef __cplusplus |
| } |
| #endif |
| #endif /* _LDACBT_INTERNAL_H_ */ |