音频重采样(海思3536)

一、操作接口

1、启用 AO 重采样
  • HI_S32 HI_MPI_AO_EnableReSmp(AUDIO_DEV AoDevId, AO_CHN AoChn,AUDIO_SAMPLE_RATE_E enInSampleRate);
    • AoDevId:音频设备号。
      • 取值范围:
        • 音频输入设备 ID:0
        • 音频输出设备 ID:[0,1,2]
    • AoChn:音频输出通道号。支持的通道范围由 AO 设备属性中的最大通道个数 u32ChnCnt 决定(即在初始化的时候配置的值)
    • enInSampleRate:音频重采样的输入采样率。
    • 返回值:
      • 成功:0
      • 错误:其他,值为错误码
2、禁用 AO 重采样。
  • HI_S32 HI_MPI_AO_DisableReSmp(AUDIO_DEV AoDevId, AO_CHN AoChn);
    • AoDevId:音频设备号。
      • 取值范围:
        • 音频输入设备 ID:0
        • 音频输出设备 ID:[0,1,2]
    • AoChn:音频输出通道号。支持的通道范围由 AO 设备属性中的最大通道个数 u32ChnCnt 决定(即在初始化的时候配置的值)
    • 返回值:
      • 成功:0
      • 错误:其他,值为错误码

二、使用方法:

1、注意事项
  • HI_MPI_AO_EnableReSmp应该在启用 AO 通道之后(HI_MPI_AO_Enable),绑定 AO 通道之前(HI_MPI_SYS_Bind),调用此接口启用重采样功能。
  • 允许重复启用重采样功能,但必须保证后配置的重采样输入采样率与之前配置的重采样输入采样率一样。
2、例子
//使能Ao
HI_S32 SAMPLE_COMM_AUDIO_StartAo(AUDIO_DEV AoDevId, HI_S32 s32AoChnCnt,
                                 AIO_ATTR_S* pstAioAttr, AUDIO_SAMPLE_RATE_E enInSampleRate, HI_BOOL bResampleEn, HI_VOID* pstAoVqeAttr, HI_U32 u32AoVqeType)
{
    HI_S32 i;
    HI_S32 s32Ret;

    if (SAMPLE_AUDIO_HDMI_AO_DEV == AoDevId)
    {
        #ifdef HI_ACODEC_TYPE_HDMI 
        
        pstAioAttr->u32ClkSel = 0;
        
        SAMPLE_COMM_AUDIO_StartHdmi(pstAioAttr);
        
        #endif
    }

    if (pstAioAttr->u32ClkChnCnt == 0)
    {
        pstAioAttr->u32ClkChnCnt = pstAioAttr->u32ChnCnt;
    }

    s32Ret = HI_MPI_AO_SetPubAttr(AoDevId, pstAioAttr);
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: HI_MPI_AO_SetPubAttr(%d) failed with %#x!\n", __FUNCTION__, \
               AoDevId, s32Ret);
        return HI_FAILURE;
    }
    //使能Ao
    s32Ret = HI_MPI_AO_Enable(AoDevId);
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: HI_MPI_AO_Enable(%d) failed with %#x!\n", __FUNCTION__, AoDevId, s32Ret);
        return HI_FAILURE;
    }

    for (i = 0; i < s32AoChnCnt; i++)
    {
        s32Ret = HI_MPI_AO_EnableChn(AoDevId, i);
        if (HI_SUCCESS != s32Ret)
        {
            printf("%s: HI_MPI_AO_EnableChn(%d) failed with %#x!\n", __FUNCTION__, i, s32Ret);
            return HI_FAILURE;
        }
        //重采样
        if (HI_TRUE == bResampleEn)
        {
            printf("AoDevId=%d, s32AoChnCnt=%d, enInSampleRate=%d\n", AoDevId, i, enInSampleRate);
            s32Ret = HI_MPI_AO_DisableReSmp(AoDevId, i);
            s32Ret |= HI_MPI_AO_EnableReSmp(AoDevId, i, enInSampleRate);
            if (HI_SUCCESS != s32Ret)
            {
                printf("%s: HI_MPI_AO_EnableReSmp(%d,%d) failed with %#x!\n", __FUNCTION__, AoDevId, i, s32Ret);
                return HI_FAILURE;
            }
        }

		if (NULL != pstAoVqeAttr)
        {
			HI_BOOL bAoVqe = HI_TRUE;
			switch (u32AoVqeType)
            {
				case 0:
                    s32Ret = HI_SUCCESS;
					bAoVqe = HI_FALSE;
                    break;
                case 1:
                    s32Ret = HI_MPI_AO_SetVqeAttr(AoDevId, i, (AO_VQE_CONFIG_S *)pstAoVqeAttr);
                    break;
                default:
                    s32Ret = HI_FAILURE;
                    break;
            }
            
            if (s32Ret)
            {
                printf("%s: SetAoVqe%d(%d,%d) failed with %#x\n", __FUNCTION__, u32AoVqeType, AoDevId, i, s32Ret);
                return s32Ret;
            }
			
		    if (bAoVqe)
            {
                s32Ret = HI_MPI_AO_EnableVqe(AoDevId, i);
	            if (s32Ret)
	            {
	                printf("%s: HI_MPI_AI_EnableVqe(%d,%d) failed with %#x\n", __FUNCTION__, AoDevId, i, s32Ret);
	                return s32Ret;
	            }
            }
        }
    }

    return HI_SUCCESS;
}

HI_S32 SAMPLE_COMM_AUDIO_AoBindAdec(AUDIO_DEV AoDev, AO_CHN AoChn, ADEC_CHN AdChn)
{
    MPP_CHN_S stSrcChn,stDestChn;

    stSrcChn.enModId = HI_ID_ADEC;
    stSrcChn.s32DevId = 0;
    stSrcChn.s32ChnId = AdChn;
    stDestChn.enModId = HI_ID_AO;
    stDestChn.s32DevId = AoDev;
    stDestChn.s32ChnId = AoChn;
    
    return HI_MPI_SYS_Bind(&stSrcChn, &stDestChn); 
}


int main()
{
    ......
    
     s32Ret = SAMPLE_COMM_AUDIO_StartAo(AoDev, stAioAttr.u32ChnCnt, &stAioAttr, AUDIO_SAMPLE_RATE_16000, HI_TRUE, NULL, 0);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }

    s32Ret = SAMPLE_COMM_AUDIO_AoBindAdec(AoDev, AoChn, AdChn);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }
    
    ......
}

三、重采样结果

1、在demo中测试
  • 播放用的音频为16K的采样率
音频重采样的输入采样率输出采样率音频效果
16K16K无法进行重采样
32K16K声音速度变快
16K8K声音速度正常,音量变低
8K16K声音速度变慢
16K32K声音正常
32K48K声音变快
2、使用解码器的程序测试
  • 播放用的音频为8K的采样率
音频重采样的输入采样率输出采样率音频效果
8K8K无法进行重采样,声音播放正常
16K8K声音速度变快,变尖,卡顿,proc/umap/ao文件中的空buff每秒增加13
32K8K声音速度变快,变尖,卡顿,proc/umap/ao文件中的空buff每秒增加19~20
48K8K声音速度变快,变尖,卡顿,proc/umap/ao文件中的空buff每秒增加21
  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
Hi3536 H.265解码处理器用户指南.pdf解码处理器 用户指南 前言 目录 前言…… 文档版本 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 解码处理器 用户指南 前言 前言 概述 本文档介绍了 芯片的特性、逻辑结构,详细描述各个模块的功能、工作)式、 相关寄存器定义,用图表的方式给出了接口时序关系和相关参数,并详细描述了芯片的 管脚定义和用途以及芯片的性能参数和封装尺寸。 产品版本 与本文档相对应的产品版木如下 产品名称 产品版本 读者对象 本文档主要适用于以下工程师 电子产品设计维护人员 电子产品元器件市场销售人员 约定符号约定 在本文中可能出现下列标志,它们所代表的含义如下 符号 说明 以本标志开始的文本表小有高度潜在危险,如果不能避 危险 免,会导致人员死亡或严重伤害 文档版本 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 解码处理器 用户指南 前言 符号 说明 以本标志开始的文本表示有中度或低度潜在危险,如果不 警告 能避免,可能导致人员轻微或中等伤害。 以本标志开始的文本表示有潜在风险,如果忽视这些文 注意 本,可能导致设备或器件损坏、数据丢失、设备性能降低 或不可预知的结果。 04窍门 以木标志开始的文木能帮助您解决某个问题或节省您的 时间。 说明 以本标志开始的文本是正文的附加信息,是对正文的强调 和补充。 通用格式约定 格式 说明 宋体 正文米用宋体表小。 黑体 级、二级、三级标题采用黑体 楷体 警告、提示等内容一律用楷体,)且在内容前后增加线条 与正文隔离。 ”格式|“ ”格式表示屏幕输出信息。此外,屏幕 输出信息中夹杂的用户从终端输入的信息采用加粗字体 表示。 表格内容约定 内容 说明 表格中的无内容单元。 丧格中的内容用广可根需要进行配置 寄存器访问类型约定 类型说明 类型说明 只读,不可写。 可读,写清零,写保持不 变 只写。 可读,置,写保持不变。 文档版本 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 解码处理器 用户指南 前言 类型说明 类型说明 可读可写。 可读,写置,写保持不变。 读清零。 可读,写后片内自清零,即 可读,写清零,写保持不变。 玄生一个脉冲。 数值单位约定 数据容量、频率、数据速率等的达方式说明如下。 类别 符号 对应的数值 数据容量(如 容量) 频率、数据速率等 地址、数据的表达方式说明如下。 符号 举例 说明 用进制表示的数据值、地址值。 表示进制的数据值以及进制序列(寄 存器描述中除外) 修订记录 修订记录累积了每次文档更新的说明。最新版本的文档包含以前所有文档版本的更新內 容 修订日期版本 修订说明 第次临时版本发布。 第章硬件 小节涉及修改。 第次临时版本发布 文档版本 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 解码处理器 用户指南 前言 修订日期版本 修订说明 第章概述 小节涉及修改。 第章硬件 小节,表增加、 几个管脚描述。 小节,修改表 新增小节 第章系统 新增小节 第章存储器接口 新增及小节。 第章视频接口 小节,修改 小节描述。 新增 小节 第次临吋版本发布。 第章存储器接口 小节,增加 模式 相关内 容 第章视频接口 小节,新增 寄存器。 第章外围设备 小节,修改时钟设置小节内容。 第次临时版本发布。 初稿版本 文档版本 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 Hi3536H.265解码处理器 用户抬南 目录 目录 1产品概述…… 1-1 1.1应用场景 1.2架构.… 1.2.1概述…1-2 1.2.2处理器内核 1-3 1.2.3视频解码标准 1-3 1.2.4视频编码标准 1.2.5视频编解码处珒.. 1.2.6 GPU 1.2.7智能视频分析…… 1.28视频与图形处理. ++,++ 1.2.9视频接口 1.2.10音频接口 1-5 1.2.11网络接口 1-5 1.2.12安全引擎 1.2.13RAID加速引擎 1.2.14外围接口 1.2.15存储器接口 1.2.16独立供电RTC 1-7 1.2.17启动模式 12.18SDK …1-7 1.2.19芯片物理规格…….… 1-7 1.3启动模式 文档版本00B05(20150323) 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 Hi3536H.265解码处理器 用户抬南 插图目录 插图目录 图1-1Hi3536的典型应用场景 1-2 图1-2Hi3536芯片逻辑框图... 1-3 文档版本00B05(20150323) 海思专有和侏密信息 版权所有深圳市海思半导体有限公司 11 Hi3536H.265解码处理器 用户抬南 表格目录 表格目录 表1-1启动模式 表1-2地址空间映射表 文档版本00B05(2015

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

刘星燎

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值