Files
AC707N/SDK/interface/media/effects/effects_adj.h
T
2025-12-03 11:12:34 +08:00

212 lines
7.1 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#ifndef __EFFECTS_ADJ__H
#define __EFFECTS_ADJ__H
#include "system/includes.h"
#include "config/config_interface.h"
#include "asm/crc16.h"
#include "fs/resfile.h"
#include "AudioEffect_DataType.h"
#include "media/framework/include/jlstream.h"
struct node_param {//单节点名称
char name[16];
};
struct eff_default_parm {
char name[16];
char cfg_index;//使用配置项的序号,指定默认配置项
char mode_index;//节点与多模式关联时,该变量用于获取相应模式下的节点参数,模式序号(如,蓝牙模式下,无多子模式,mode_index 是0
};
struct cfg_info {
u16 offset;
u16 size;
u16 uuid;
u8 subid;
};
#define indicator_check_points 4
#define indicator_read_points 40
struct indicator_upload_data {
u8 len;
u8 type;
u8 index;
u8 reserve;
float min;
float max;
int nbit;//16bit、32bit
int peak[indicator_read_points];
} __attribute__((packed));
// 配置文件格式
//文件头+节点配置头+节点数据区
struct node_file_head {
u16 version;
char reserved[14];
} __attribute__((packed));
#define EQ_NODE_CFG_TYPE 0x1//EQ节点配置
#define DRC_NODE_CFG_TYPE 0x2//DRC节点配置
#define FORM_NODE_CFG_TYPE 0x3//表单节点配置
#define PIPELINE_CFG_TYPE 0x4//参数组数据
#define UUID_MAP_CFG_TYPE 0x5//uuid映射表
#define DRC_ADVANCE_NODE_CFG_TYPE 0x6//drc advance 节点配置
struct node_cfg_format {
u8 type; //0x1 EQ配置 0x2 DRC配置 0x3 表单配置 0x4 参数组数据 0x5 uuid映射表
u16 uuid;
u8 subid;
u8 mode_index; //模式序号
u16 node_name_uuid; //节点名称的crc16
u16 config_name_uuid;//配置名称的crc16
u8 config_index; //配置序号
u32 offset; //参数偏移位置
u16 size; //参数大小
char reserved[16]; //保留位
} __attribute__((packed));
struct group_param {
u16 uuid; //流模块uuid
u8 num; //参数组个数
u8 reserve;
u8 data[0]; //参数组名称的uuid
} __attribute__((packed));
#define EFF_CONFIG_ID (0x21) //调音注册的cmd
#define REPLY_TO_TOOL (0) //应答工具使用的标识
#define EFF_ADJ_CMD (0x500)//调音命令
#define EFF_UPLOAD_CMD (0x501)//数据上报命令,用于发送数据给上位机
#define EFF_MODE_CMD (0x502)//模式切换命令,上位机发送当前模式序号给小机
#define EFF_INDICATOR_CMD (0x503)//指示器主动来获取数据
#define EFF_CRC_CMD (0x504)//stream.bin crc校验命令
#define EFF_FORM_CMD (0x506)//表单节点获取当前值命令
#define EFF_ONLINE_CMD (0x507)//检查需要在线调试的节点
#define EFF_NODE_MERGE_UPDATE BIT(0)
#define EFF_MANUAL_ADJ_NODE BIT(1)
enum {
ERR_NONE = 1, //处理成功,返回"OK"
ERR_COMM = 0, //通用错误,例如模块未打开,返回"ER"
ERR_ACCEPTABLE = -1, //可接受的错误,由case内部处理,返回内部数据
EFF_ERR_TYPE_PTR_NULL = -2,//模块打开失败,返回"ER_FLOW_OPEN_BUF"
EFF_ERR_TYPE_ALGORITHM_NULL = -3,//算法返回错误,返回"ER_FLOW_OPEN_ALGORITHM"
EFF_ERR_CRC = -4,//CRC校验失败
EFF_ERR_RUN = -5,//音效run失败
};
struct effects_online_adjust {
u16 uuid;
} __attribute__((packed));
//支持调音的节点,需使用该操作注册
#define REGISTER_ONLINE_ADJUST_TARGET(online) \
static struct effects_online_adjust online sec(.effects_online_adjust)
extern struct effects_online_adjust effects_online_adjust_begin[];
extern struct effects_online_adjust effects_online_adjust_end[];
#define list_for_online_adjust_target(p) \
for (p = effects_online_adjust_begin; p < effects_online_adjust_end; p++)
/*
*节点通过uuid 与name获取在线调试音效的参数
* */
int get_eff_online_param(u32 uuid, char *name, void *packet);
/*
*获取需要指定得默认配置
* */
int get_eff_default_param(int arg);
/*
*表单节点参数信息获取(获取目标参数存储地址,与大小)
*mode_index:参数组序号(模式序号)
*name:音效节点名字(节点内用户自定义)
*cfg_index:目标配置项(0,1,2....
*info:音效节点的配置项信息(存储的目标地址,配置项大小)
*return: 0 返回成功, 非0:返回失败
* */
int jlstream_read_form_node_info_base(char mode_index, const char *name, char cfg_index, struct cfg_info *info);
/*
*根据文件内偏移,获取目标配置参数
*return: 实际长度: 返回成功, 0:返回失败
* */
int jlstream_read_form_cfg_data(struct cfg_info *info, void *data);
/*
*表单节点参数获取
*mode_index:参数组序号(模式序号)
*name:音效节点名字(节点内用户自定义)
*cft_index:目标配置项(0,1,2....
*data:目标参数返回地址
*return: 实际长度: 返回成功, 0:返回失败
* */
int jlstream_read_form_data(char mode_index, const char *name, char cfg_index, void *data);
/*
*通过uuid与subid直接获取节点参数,节点内如有多份参数,需通过STREAM_EVENT_GET_NODE_PARM case内指定目标参数序号
*uuid:节点uuid
*subid:节点subid
*data:目标参数返回地址
*node_name:节点配置名称返回地址
*return: 实际长度: 返回成功, 0:返回失败
* */
int jlstream_read_node_data_new(u16 uuid, u8 subid, void *data, char *node_name);
/*
*通过uuid与subid、cfg_index直接获取节点参数
*uuid:节点uuid
*subid:节点subid
*cfg_index:节点内的配置序号
*data:目标参数返回地址
*node_name:节点配置名称返回地址
*return: 实际长度: 返回成功, 0:返回失败
* */
int jlstream_read_node_data_by_cfg_index(u16 uuid, u8 subid, char cfg_index, void *data, char *node_name);
/*
*通过uuid与subid直接获取节点info信息,节点内如有多份参数,需通过STREAM_EVENT_GET_NODE_PARM case内指定目标参数序号
*uuid:节点uuid
*subid:节点subid
*data:目标参数返回地址
*node_name:节点配置名称返回地址
*info:节点信息保存的地址
*return: 1:读取info信息成功,0:读取info信息失败
* */
int jlstream_read_node_info_data(u16 uuid, u8 subid, char *node_name, struct cfg_info *info);
/*
*节点info参数获取
*mode_index:参数组序号(模式序号)
*name:音效节点名字(节点内用户自定义)
*cft_index:目标配置项(0,1,2....
*return: 1:读取info信息成功,0:读取info信息失败
* */
int jlstream_read_info_data(char mode_index, const char *name, char cfg_index, struct cfg_info *info);
/*
*通过uuid获取参数组个数
*pipeline_uuid:流模块uuid
*group_param_num:返回参数组个数
*return 0:成功, 非0:失败
* */
int jlstream_read_pipeline_param_group_num(u16 pipeline_uuid, u8 *group_param_num);
/*
*通过uuid和name获取长度为len的在线调试参数param
* */
int jlstream_read_effects_online_param(u32 uuid, char *name, void *param, u16 len);
/*
*小机主动往上位机发数据接口
* */
void eff_node_send_packet(u32 id, u8 sq, u8 *packet, int size);
int jlstream_read_indicator_node_data(u16 uuid, u8 subid, u8 *param);
#endif/*__EFFECTS_ADJ__H*/