qn1582596430

qn1582596430

0个粉丝

1

问答

0

专栏

0

资料

qn1582596430  发布于  2020-02-25 10:18:33
采纳率 0%
1个问答
2556

如何将16位48000采样率立体声pcm文件通过hisi音频编码器编码成aac

 
打开一个16位采样率48000立体声的pcm文件,如何通过配置
typedef struct hiAUDIO_FRAME_S
{
    AUDIO_BIT_WIDTH_E   enBitwidth;     /*audio frame bitwidth*/
    AUDIO_SOUND_MODE_E  enSoundmode;    /*audio frame momo or stereo mode*/
    HI_U8*  u64VirAddr[2];
    HI_U64  u64PhyAddr[2];
    HI_U64  u64TimeStamp;                /*audio frame timestamp*/
    HI_U32  u32Seq;                      /*audio frame seq*/
    HI_U32  u32Len;                      /*data lenth per channel in frame*/
    HI_U32  u32PoolId[2];
} AUDIO_FRAME_S;

然后调用HI_S32 HI_MPI_AENC_SendFrame(AENC_CHN AeChn, const AUDIO_FRAME_S *pstFrm, const AEC_FRAME_S *pstAecFrm);进行编码成aac,下面代码应该怎样配置音频结构体数据

#if 1
                    AIO_ATTR_S stAioAttr;
                        HI_S32      s32AencChnCnt;
#ifdef HI_ACODEC_TYPE_TLV320AIC31
                    AUDIO_DEV   AiDev = SAMPLE_AUDIO_EXTERN_AI_DEV;
                    AUDIO_DEV   AoDev = SAMPLE_AUDIO_EXTERN_AO_DEV;
                    stAioAttr.enSamplerate   = AUDIO_SAMPLE_RATE_48000;
                    stAioAttr.enBitwidth     = AUDIO_BIT_WIDTH_16;
                    stAioAttr.enWorkmode     = AIO_MODE_I2S_MASTER;
                    stAioAttr.enSoundmode    = AUDIO_SOUND_MODE_STEREO;
                    stAioAttr.u32EXFlag      = 0;
                    stAioAttr.u32FrmNum      = 30;
                    stAioAttr.u32PtNumPerFrm = AACLC_SAMPLES_PER_FRAME;
                    stAioAttr.u32ChnCnt      = 2;
                    stAioAttr.u32ClkSel      = 1;
                    stAioAttr.enI2sType      = AIO_I2STYPE_EXTERN;
#else
                    AUDIO_DEV   AiDev = SAMPLE_AUDIO_INNER_AI_DEV;
                    AUDIO_DEV   AoDev = SAMPLE_AUDIO_INNER_AO_DEV;
                    stAioAttr.enSamplerate   = AUDIO_SAMPLE_RATE_48000;
                    stAioAttr.enBitwidth     = AUDIO_BIT_WIDTH_16;
                    stAioAttr.enWorkmode     = AIO_MODE_I2S_MASTER;
                    stAioAttr.enSoundmode    = AUDIO_SOUND_MODE_STEREO;
                    stAioAttr.u32EXFlag      = 0;
                    stAioAttr.u32FrmNum      = 30;
                    stAioAttr.u32PtNumPerFrm = AACLC_SAMPLES_PER_FRAME;
                    stAioAttr.u32ChnCnt      = 2;
                    stAioAttr.u32ClkSel      = 0;
                    stAioAttr.enI2sType      = AIO_I2STYPE_INNERCODEC;
#endif
                    gs_bAioReSample = HI_FALSE;
                    enInSampleRate  = AUDIO_SAMPLE_RATE_BUTT;
                    enOutSampleRate = AUDIO_SAMPLE_RATE_BUTT;

                       
                        s32AencChnCnt = stAioAttr.u32ChnCnt >> stAioAttr.enSoundmode;  //1
                    s32Ret = SAMPLE_COMM_AUDIO_StartAenc(s32AencChnCnt, &stAioAttr, gs_enPayloadType);
                    if (s32Ret != HI_SUCCESS)
                    {
                                   SAMPLE_DBG(s32Ret);
                                 
                    }

            AUDIO_FRAME_S stFrame;
                           AEC_FRAME_S   stAecFrm;
                        AUDIO_STREAM_S stStream;
                        FILE *fp = fopen("/mnt/playout_t.pcm", "rb+");
                        FILE *fp_down = fopen("/mnt/audio.aac", "wb+");
                        int nBytesRead = 0;
                        int s32GetRet = -1;
                        unsigned char *pbPCMBuffer = (unsigned char *)malloc(960);
                        stFrame.u64VirAddr[0] =(unsigned char *)malloc(960);
                        stFrame.enBitwidth = 1;
                        stFrame.enSoundmode = 1;
                       
                        stFrame.u64TimeStamp = 0;
                        while(1)
                        {
                                nBytesRead = fread(pbPCMBuffer, 1, 960, fp);
                                printf("nBytesRead = %d\n",nBytesRead);
                                stFrame.u32Len = nBytesRead;
                                memcpy(stFrame.u64VirAddr[0],pbPCMBuffer,nBytesRead);
                                stFrame.u32Len = nBytesRead;
                               
                                memset(&stAecFrm, 0, sizeof(AEC_FRAME_S));
                                s32Ret = HI_MPI_AENC_SendFrame(0, &stFrame, &stAecFrm);
                                if (HI_SUCCESS != s32Ret )
                {
                    printf("%s: HI_MPI_AENC_SendFrame, failed with %#x!\n", \
                           __FUNCTION__, s32Ret);

                                                  break;
         
                }

                                s32GetRet = HI_MPI_AENC_GetStream(0, &stStream, HI_FALSE);
                    if (HI_SUCCESS != s32GetRet )
                    {
                        printf("%s: HI_MPI_AENC_GetStream, failed with %#x!\n", \
                               __FUNCTION__, s32GetRet);
                    }

                                fwrite(stStream.pStream, 1, stStream.u32Len, fp_down);
                               
                                if(nBytesRead <= 0)
                        {
                            break;
                        }
                               
                        }
                        #endif
            break;
        }
我来回答
回答2个
时间排序
认可量排序

merlinholland

1个粉丝

3

问答

0

专栏

3

资料

merlinholland 2020-03-03 11:33:40
认可0
海思只有G711之类的音频编码吧,要AAC的话,需要用软编

qn1582596430

0个粉丝

1

问答

0

专栏

0

资料

qn1582596430 2020-03-25 17:50:02
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=154957&ptid=79239]merlinholland 发表于 2020-3-3 11:33[/url]
海思只有G711之类的音频编码吧,要AAC的话,需要用软编[/quote]

使用开源库将pcm转为aac时由于cpu资源问题  转换不成功  现在只能hisi接口硬解   但是我不知道怎么配置
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
+ 添加网盘链接/附件

Markdown 语法

  • 加粗**内容**
  • 斜体*内容*
  • 删除线~~内容~~
  • 引用> 引用内容
  • 代码`代码`
  • 代码块```编程语言↵代码```
  • 链接[链接标题](url)
  • 无序列表- 内容
  • 有序列表1. 内容
  • 缩进内容
  • 图片![alt](url)
举报反馈

举报类型

  • 内容涉黄/赌/毒
  • 内容侵权/抄袭
  • 政治相关
  • 涉嫌广告
  • 侮辱谩骂
  • 其他

详细说明

易百纳技术社区