147 lines
4.4 KiB
C
147 lines
4.4 KiB
C
![]() |
/***************************************************************************
|
||
|
*
|
||
|
* Copyright 2015-2019 BES.
|
||
|
* All rights reserved. All unpublished rights reserved.
|
||
|
*
|
||
|
* No part of this work may be used or reproduced in any form or by any
|
||
|
* means, or stored in a database or retrieval system, without prior written
|
||
|
* permission of BES.
|
||
|
*
|
||
|
* Use of this work is governed by a license granted by BES.
|
||
|
* This work contains confidential and proprietary information of
|
||
|
* BES. which is protected by copyright, trade secret,
|
||
|
* trademark and other intellectual property rights.
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
#ifndef __APP_TWS_IBRT_AUDIO_SYNC_H__
|
||
|
#define __APP_TWS_IBRT_AUDIO_SYNC_H__
|
||
|
|
||
|
#define TWS_IBRT_AUDIO_SYNC_FACTOR_REFERENCE (1.0f - 80*1e-6)
|
||
|
//#define TWS_IBRT_AUDIO_SYNC_FACTOR_REFERENCE (1.0f)
|
||
|
#define TWS_IBRT_AUDIO_SYNC_FACTOR_FAST_LIMIT ( 0.0005f)
|
||
|
#define TWS_IBRT_AUDIO_SYNC_FACTOR_SLOW_LIMIT (-0.0005f)
|
||
|
|
||
|
#define TWS_IBRT_AUDIO_SYNC_DEAD_ZONE_US (5)
|
||
|
|
||
|
#define APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_FLAG_NULL (0)
|
||
|
#define APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_FLAG_NEEDRETRIGGER (1<<1)
|
||
|
|
||
|
#define APP_TWS_IBRT_AUDIO_SYNC_SAMPLEING_FLAG_NULL (0)
|
||
|
#define APP_TWS_IBRT_AUDIO_SYNC_SAMPLEING_FLAG_DETECTER (1<<1)
|
||
|
|
||
|
#ifdef __A2DP_AUDIO_SYNC_FIX_DIFF_NOPID__
|
||
|
#define APP_TWS_IBRT_AUDIO_SYNC_TUNE_SKIP_NEXT_CNT (50)
|
||
|
#else
|
||
|
#define APP_TWS_IBRT_AUDIO_SYNC_TUNE_SKIP_NEXT_CNT (200)
|
||
|
#endif
|
||
|
|
||
|
typedef enum {
|
||
|
APP_TWS_IBRT_AUDIO_TRIGGER_TYPE_INIT_SYNC,
|
||
|
APP_TWS_IBRT_AUDIO_TRIGGER_TYPE_RESUME,
|
||
|
APP_TWS_IBRT_AUDIO_TRIGGER_TYPE_LOCAL,
|
||
|
}APP_TWS_IBRT_AUDIO_TRIGGER_TYPE;
|
||
|
|
||
|
typedef struct {
|
||
|
uint32_t timestamp;
|
||
|
uint16_t sequenceNumber;
|
||
|
uint8_t curSubSequenceNumber;
|
||
|
uint8_t totalSubSequenceNumber;
|
||
|
uint32_t frame_samples;
|
||
|
} APP_TWS_IBRT_AUDIO_SYNC_TRIGGER_PLAYBACK_INFO_T;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t trigger_time;
|
||
|
uint8_t trigger_skip_frame;
|
||
|
APP_TWS_IBRT_AUDIO_TRIGGER_TYPE trigger_type;
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_TRIGGER_PLAYBACK_INFO_T audio_info;
|
||
|
uint16_t sequenceNumberStart;
|
||
|
float factor_reference;
|
||
|
uint8_t a2dp_session;
|
||
|
uint32_t handler_cnt;
|
||
|
uint32_t trigger_bt_clk;
|
||
|
uint16_t trigger_bt_cnt;
|
||
|
#ifdef __SW_TRIG__
|
||
|
uint16_t tg_bitcnt;
|
||
|
#endif
|
||
|
}APP_TWS_IBRT_AUDIO_SYNC_TRIGGER_T;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
uint32_t reseved;
|
||
|
}APP_TWS_IBRT_AUDIO_NEED_RETRIGGER_T;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
float factor_reference;
|
||
|
uint32_t handler_cnt;
|
||
|
}APP_TWS_IBRT_AUDIO_SYNC_TUNE_T;
|
||
|
|
||
|
typedef struct
|
||
|
{
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_TUNE_T sync_tune;
|
||
|
uint32_t new_reference_flag;
|
||
|
}APP_TWS_IBRT_AUDIO_SYNC_TUNE_REQ_T;
|
||
|
|
||
|
typedef enum{
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_RESUME_REQ_DISABLE,
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_RESUME_REQ_NULL,
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_RESUME_REQ_REQUEST,
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_RESUME_REQ_WAITRESUME,
|
||
|
}APP_TWS_IBRT_AUDIO_SYNC_MISMATCH_RESUME_REQ;
|
||
|
|
||
|
typedef struct{
|
||
|
float factor_reference;
|
||
|
float factor_fast_limit;
|
||
|
float factor_slow_limit;
|
||
|
uint32_t dead_zone_us;
|
||
|
}APP_TWS_IBRT_AUDIO_SYNC_CFG_T;
|
||
|
|
||
|
float app_tws_ibrt_audio_sync_config_factor_reference_get(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_sampleing_set_flag(uint32_t flag);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_sampleing_get_flag(uint32_t *flag);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_new_reference(float factor_reference);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_reconfig(APP_TWS_IBRT_AUDIO_SYNC_CFG_T *config);
|
||
|
|
||
|
bool app_tws_ibrt_audio_sync_playback_info_initdone(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_init(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_start(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_restart(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_stop(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_tick(uint32_t tick);
|
||
|
|
||
|
bool app_tws_ibrt_audio_sync_sampleing(float sample);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_mismatch_tick(bool mismatch);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_mismatch_resume_handle(uint32_t tick);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_mismatch_resume_notify(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_tune_request(APP_TWS_IBRT_AUDIO_SYNC_TUNE_REQ_T *sync_tune);
|
||
|
|
||
|
bool app_tws_ibrt_audio_sync_tune_onprocess(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_tune_handle(uint32_t tick);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_tune_cancel(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_tune_skip_next_cnt_proc(void);
|
||
|
|
||
|
int app_tws_ibrt_audio_sync_tune_need_skip(void);
|
||
|
|
||
|
void app_tws_ibrt_audio_sync_tune_skip_next_cnt(int32_t bypass_next_cnt);
|
||
|
|
||
|
APP_TWS_IBRT_AUDIO_SYNC_CFG_T *app_tws_ibrt_audio_sync_config_default_get(void);
|
||
|
|
||
|
#endif
|