73 lines
2.2 KiB
C
73 lines
2.2 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 __USB_AUDIO_SYNC_H__
|
|
#define __USB_AUDIO_SYNC_H__
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
#include "plat_types.h"
|
|
|
|
typedef uint32_t (*USB_AUDIO_SYNC_TIME_TO_MS)(uint32_t time);
|
|
|
|
enum UAUD_SYNC_RET_T {
|
|
UAUD_SYNC_IDLE,
|
|
UAUD_SYNC_START,
|
|
UAUD_SYNC_ERR,
|
|
};
|
|
|
|
struct USB_AUDIO_STREAM_INFO_T {
|
|
// Difference error threshold
|
|
uint16_t err_thresh;
|
|
// Difference synchronization threshold
|
|
uint16_t sync_thresh;
|
|
// Sample rate
|
|
uint32_t samp_rate;
|
|
// Total sample count of the buffer
|
|
uint32_t samp_cnt;
|
|
// The number of value to calculate the average
|
|
uint8_t diff_avg_cnt;
|
|
// The stream info ID
|
|
uint8_t id;
|
|
// Whether to enable diff_target
|
|
uint8_t diff_target_enabled;
|
|
// The Max adjust ratio moving to diff_target
|
|
float max_target_ratio;
|
|
// The abosulte difference value between current diff and diff_target to apply max_target_ratio
|
|
uint32_t max_target_thresh;
|
|
// The target of the difference
|
|
int diff_target;
|
|
// Function to convert timestamp to ms. If NULL, default timer will be used.
|
|
USB_AUDIO_SYNC_TIME_TO_MS time_to_ms;
|
|
// Current timestamp. If time_to_ms is NULL, this member will be ignored.
|
|
uint32_t time;
|
|
// Internal control block
|
|
uint32_t ctrl_block[8];
|
|
};
|
|
|
|
void usb_audio_sync_reset(struct USB_AUDIO_STREAM_INFO_T *info);
|
|
|
|
int usb_audio_sync_normalize_diff(int diff, uint32_t size);
|
|
|
|
enum UAUD_SYNC_RET_T usb_audio_sync(uint32_t pos_a, uint32_t pos_b, struct USB_AUDIO_STREAM_INFO_T *info, float *p_ratio);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|