pinebuds/services/ibrt_core/inc/app_tws_ibrt_audio_sync.h

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