fangshy

fangshy

0个粉丝

3

问答

0

专栏

0

资料

fangshy  发布于  2016-11-14 20:08:33
采纳率 0%
3个问答
4512

3531的aac编码可以使用3536的aac编码库么?

 
大家好,3531的aac编码可以使用3536的aac编码库么? ,谢谢,目前做出来的效果是抖动的杂音一片,有遇到过的么如何解决,谢谢!
我来回答
回答14个
时间排序
认可量排序

nomark

0个粉丝

1

问答

0

专栏

0

资料

nomark 2016-11-14 22:21:30
认可0
编译工具链不一样,不能直接用吧,可以移植libfdk_aac或libfaac

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-16 16:38:40
认可0
本帖最后由 localhost 于 2016-11-16 16:44 编辑

最近也在弄3531a的音频 aac编码 之前在3516与3536上用过libfdk_aac的库实现
我是讲acc的库独立出来,是将平台获取编码后的pcm数据拿来转化。
但是,目前在音频编码配置过程中出现一些问题,希望借楼可以研究一下,
大概情况如下:
      我是通过修改3536a的30版本SDK中的venc和audio的sample实现,但是对于两程序的MPP初始化配置过程中有冲突。
也就是说,使用SAMPLE_COMM_SYS_Init按照venc的配置初始化一次后 视频编码可以完成。但是音频会出现如下错误:


如果重复按照audio中的配置初始化,那么音频可以编出pcm文件而视频编码失败,如此原因是由于视频系统的初始化被音频 去初始化 掉了,我看了一下音频的系统初始化部分并没有参数 仅仅做了vb变量的清零
代码如下:
视频vb配置

[code]    SAMPLE_VI_MODE_E enViMode = SAMPLE_VI_MODE_8_720P;

    HI_S32 s32VpssGrpCnt = 8;
    PAYLOAD_TYPE_E enPayLoad[3]= {PT_H264, PT_JPEG,PT_H264};
    PIC_SIZE_E enSize[3] = {PIC_HD720, PIC_HD720,PIC_CIF};
    HI_U32 u32Profile = 1; /*0: baseline; 1:MP; 2:HP 3:svc-t */
    VB_CONF_S stVbConf;
    VPSS_GRP VpssGrp;
    VPSS_CHN VpssChn;
    VENC_CHN VencChn;
    SAMPLE_RC_E enRcMode;
        VPSS_CHN_MODE_S stVpssChnMode;
   
    HI_S32 i;
    HI_S32 s32Ret = HI_SUCCESS;
    HI_U32 u32BlkSize;
    HI_CHAR ch = '\0';
    SIZE_S stSize;

    /******************************************
     step  1: init variable
    ******************************************/
    memset(&stVbConf,0,sizeof(VB_CONF_S));

    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                PIC_HD720, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH,COMPRESS_MODE_SEG);
    stVbConf.u32MaxPoolCnt = 64;
   
    stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
    //stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 6;
    stVbConf.astCommPool[0].u32BlkCnt = s32VpssGrpCnt * 12;
    memset(stVbConf.astCommPool[0].acMmzName,0,
        sizeof(stVbConf.astCommPool[0].acMmzName));

   
    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                PIC_CIF, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH,COMPRESS_MODE_SEG);
   
    memset(stVbConf.astCommPool[1].acMmzName,0,
        sizeof(stVbConf.astCommPool[1].acMmzName));
    stVbConf.astCommPool[1].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[1].u32BlkCnt = s32VpssGrpCnt * 6;
    memset(stVbConf.astCommPool[1].acMmzName,0,
        sizeof(stVbConf.astCommPool[1].acMmzName));

    /******************************************
     step 2: mpp system init.
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("system init failed with %d!\n", s32Ret);
        goto END_VENC_8_720p_0;
    }[/code]
音频sys配置
[code]    VB_CONF_S stVbConf;
   
    /**/
    memset(&stVbConf, 0, sizeof(VB_CONF_S));
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: system init failed with %d!\n", __FUNCTION__, s32Ret);
        return HI_FAILURE;
    }[/code]
楼主 可以帮帮忙看看是怎么配置音频呢

下面的是SAMPLE_COMM_SYS_INIT函数

[code]
/******************************************************************************
* function : vb init & MPI system init
******************************************************************************/
HI_S32 SAMPLE_COMM_SYS_Init(VB_CONF_S *pstVbConf)
{
    MPP_SYS_CONF_S stSysConf = {0};
    HI_S32 s32Ret = HI_FAILURE;
    HI_S32 i;

    HI_MPI_SYS_Exit();
   
    for(i=0;i     {
         HI_MPI_VB_ExitModCommPool(i);
    }
    for(i=0; i     {
         HI_MPI_VB_DestroyPool(i);
    }
    HI_MPI_VB_Exit();

    if (NULL == pstVbConf)
    {
        SAMPLE_PRT("input parameter is null, it is invaild!\n");
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_VB_SetConf(pstVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VB_SetConf failed!\n");
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_VB_Init();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_VB_Init failed!\n");
        return HI_FAILURE;
    }

    stSysConf.u32AlignWidth = SAMPLE_SYS_ALIGN_WIDTH;
    s32Ret = HI_MPI_SYS_SetConf(&stSysConf);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_SYS_SetConf failed\n");
        return HI_FAILURE;
    }

    s32Ret = HI_MPI_SYS_Init();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("HI_MPI_SYS_Init failed!\n");
        return HI_FAILURE;
    }

    return HI_SUCCESS;
}
[/code]

   

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-16 16:53:11
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41342&ptid=13363]localhost 发表于 2016-11-16 16:38[/url]
最近也在弄3531a的音频 aac编码 之前在3516与3536上用过libfdk_aac的库实现
我是讲acc的库独立出来,是将 ...[/quote]

从错误上来看,很象是audio的库没有加载

音频和VB初始化没有关系, 用图像编码的初始化即可

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-16 17:24:44
认可0
本帖最后由 localhost 于 2016-11-17 13:08 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=41344&ptid=13363]zhuangweiye 发表于 2016-11-16 16:53[/url]
从错误上来看,很象是audio的库没有加载

音频和VB初始化没有关系, 用图像编码的初始化即可[/quote]

不知道 前辈说的是哪里的audio库

目前 在实验过程中 发现的区别是 音频sys配置部分 如果操作了 音频就可以获取并编码
这个部分 是还有隐含操作么 还是什么原因引起呢[postbg]1.jpg[/postbg]

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-17 13:07:27
认可0
本帖最后由 localhost 于 2016-11-17 13:27 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=41344&ptid=13363]zhuangweiye 发表于 2016-11-16 16:53[/url]
从错误上来看,很象是audio的库没有加载

音频和VB初始化没有关系, 用图像编码的初始化即可[/quote]

系统输入法坏掉了 刚弄好我把修改的代码附上并配了注释 请前辈指导一下谢谢啦
[code]#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include

#include "sample_comm.h"
#include "tlv320aic31.h"
#include "../self/JY3531_SELF_Acc.h"

VIDEO_NORM_E gs_enNorm = VIDEO_ENCODING_MODE_PAL;
#define VPSSGRPCNT 6

/*** 固定变量声明定义 ***/
static PAYLOAD_TYPE_E gs_enPayloadType = PT_LPCM;//PT_ADPCMA;
static HI_U32  g_u32AiDev = 0;
static HI_U32  g_u32AiCnt = 0;
static HI_BOOL gs_bAioReSample = HI_FALSE;
static HI_U32  g_u32AoDev = 0;
static HI_U32  g_u32AoCnt = 0;
static HI_U32  g_u32Adec = 0;
static HI_U32  g_u32AencCnt = 0;
static HI_BOOL gs_bUserGetMode = HI_FALSE;

/*** 中转变量声明定义 ***/
static ADEC_CHN    AdChn = 0;
       AUDIO_DEV   AiDev = 1;//SAMPLE_AUDIO_AI_DEV;   
       AENC_CHN    AeChn;
       AI_CHN      AiChn;
       HI_S32      s32AiChnCnt;   
static HI_S32  s32AencChnCnt=1;

/*** 进程异常输出错误号 ***/
#define SAMPLE_DBG(s32Ret)\
do{\
    printf("s32Ret=%#x,fuc:%s,line:%d\n", s32Ret, __FUNCTION__, __LINE__);\
}while(0)

/*** 信号函数 ***/
void JY3531A_VENC_AUDIO_HandleSig(HI_S32 signo)
{
    if (SIGINT == signo || SIGTSTP == signo)
    {
        SAMPLE_COMM_AUDIO_DestoryAllTrd();

                SAMPLE_COMM_AUDIO_StopAi(g_u32AiDev, g_u32AiCnt, gs_bAioReSample, HI_FALSE);
   
            SAMPLE_COMM_AUDIO_StopAo(g_u32AoDev, g_u32AoCnt, gs_bAioReSample, HI_FALSE);

                SAMPLE_COMM_AUDIO_StopAdec(g_u32Adec);

                SAMPLE_COMM_AUDIO_StopAenc(g_u32AencCnt);
       
        SAMPLE_COMM_SYS_Exit();
        printf("\033[0;31mprogram exit abnormally!\033[0;39m\n");   
        printf("\033[0;31mprogram termination abnormally!\033[0;39m\n");
    }
    exit(-1);
}


/*** 音频文件名后缀选择 ***/
static char* JY3531A_AUDIO_Pt2Str(PAYLOAD_TYPE_E enType)
{
    if (PT_G711A == enType)  
    {
        return "g711a";
    }
    else if (PT_G711U == enType)  
    {
        return "g711u";
    }
    else if (PT_ADPCMA == enType)  
    {
        return "adpcm";
    }
    else if (PT_G726 == enType)
    {
        return "g726";
    }
    else if (PT_LPCM == enType)  
    {
        return "pcm";
    }
    else
    {
        return "data";
    }
}

/*** 创建音频存储文件 打开并返回句柄 ***/
static FILE * JY3531A_AUDIO_OpenAencFile(AENC_CHN AeChn, PAYLOAD_TYPE_E enType)
{
    FILE *pfd;
    HI_CHAR aszFileName[128];
   
    /* create file for save stream*/
    sprintf(aszFileName, "audio_chn%d.%s", AeChn, JY3531A_AUDIO_Pt2Str(enType));
    pfd = fopen(aszFileName, "w+");
    if (NULL == pfd)
    {
        printf("%s: open file %s failed\n", __FUNCTION__, aszFileName);
        return NULL;
    }
    printf("open stream file:\"%s\" for aenc ok\n", aszFileName);
    return pfd;
}

/*** 音频输入及编码输出 ***/
HI_S32 JY3531A_AUDIO_AiAenc(HI_VOID)
{
    /**/
    HI_S32      i,s32Ret;
//    HI_S32      s32AiChnCnt;
//    HI_S32      s32AencChnCnt;
//    AUDIO_DEV   AiDev = 1;//SAMPLE_AUDIO_AI_DEV;   
//    AENC_CHN    AeChn;
//    AI_CHN      AiChn;
//    ADEC_CHN    AdChn = 0;
    FILE        *pfd = NULL;
        
    AIO_ATTR_S  stAioAttr; //音频输入输出设备属性   

    stAioAttr.enSamplerate   = AUDIO_SAMPLE_RATE_44100; //采样频率
    stAioAttr.enBitwidth     = AUDIO_BIT_WIDTH_16;      //采样精度
    stAioAttr.enWorkmode     = AIO_MODE_I2S_SLAVE;      //工作模式
    stAioAttr.enSoundmode    = AUDIO_SOUND_MODE_MONO;   //音频声道
    stAioAttr.u32EXFlag      = 1;                       //8b & 16b扩展标志??
    stAioAttr.u32FrmNum      = 30;                      //缓存帧数目
    stAioAttr.u32PtNumPerFrm = SAMPLE_AUDIO_PTNUMPERFRM;//每帧采样点个数
    stAioAttr.u32ChnCnt      = 1;                       //通道数??
    stAioAttr.u32ClkChnCnt   = 20;                      //时钟分频通道数??
    stAioAttr.u32ClkSel      = 0;                       //ai是否复用ao帧同步时钟以及位流时钟

    /********************************************
    step 2: start Ai
    ********************************************/
    s32AiChnCnt = stAioAttr.u32ChnCnt;
    //s32AencChnCnt = 1;//s32AiChnCnt;
    g_u32AiCnt = s32AiChnCnt;
    g_u32AiDev = AiDev;
    s32Ret = SAMPLE_COMM_AUDIO_StartAi(  AiDev   , s32AiChnCnt, &stAioAttr, AUDIO_SAMPLE_RATE_44100, HI_FALSE, NULL, 0);
    if (s32Ret != HI_SUCCESS)         /*输入设备号,输入通道数, 设备属性 , 采样频率, 重采样,声音增强属性,是否声音增强*/
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }
   
    /********************************************
    step 3: start Aenc
    ********************************************/
    g_u32AencCnt = s32AencChnCnt;
    s32Ret = SAMPLE_COMM_AUDIO_StartAenc(s32AencChnCnt, SAMPLE_AUDIO_PTNUMPERFRM, gs_enPayloadType);
    if (s32Ret != HI_SUCCESS)          /*音频编码通道数,每帧采样点数,  编码协议*/
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }
   
    /********************************************
    step 4: Aenc bind Ai Chn
    ********************************************/
    for (i=0; i     {
        AeChn = i;
        AiChn = i;

        if (HI_TRUE == gs_bUserGetMode)
        {
            s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAiAenc(AiDev, AiChn, AeChn);//创建音频编码线程
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_DBG(s32Ret);
                return HI_FAILURE;
            }
        }
        else
        {        
            s32Ret = SAMPLE_COMM_AUDIO_AencBindAi(AiDev, AiChn, AeChn);//编码通道绑定输入设备
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_DBG(s32Ret);
                return s32Ret;
            }
        }
        printf("Ai(%d,%d) bind to AencChn:%d ok!\n",AiDev , AiChn, AeChn);
    }  

    /*** 获取音频保存文件句柄 ***/
    pfd = JY3531A_AUDIO_OpenAencFile(AdChn, gs_enPayloadType);
    if (!pfd)
    {
        SAMPLE_DBG(HI_FAILURE);
        return HI_FAILURE;
    }        
   
    /*** 创建获取音频编码并保存线程 ***/
    s32Ret = SAMPLE_COMM_AUDIO_CreatTrdAencAdec(AeChn, AdChn, pfd);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }      
         
    return 0;   
}


int main(void)
{
    signal(SIGINT , JY3531A_VENC_AUDIO_HandleSig);
    signal(SIGTERM, JY3531A_VENC_AUDIO_HandleSig);

    /* variable  */
    HI_S32   grp[8][2];
    HI_S32   i,j;
    VENC_CHN VencChn;
    VPSS_GRP VpssGrp;   
    HI_S32   s32Ret = HI_SUCCESS;
    HI_U32   u32Profile = 2; /*0: baseline; 1:MP; 2:HP 3:svc-t */   
   
    PAYLOAD_TYPE_E enPayLoad = PT_H264;
    PIC_SIZE_E     enSize[2] = {PIC_HD1080, PIC_VGA};
    SAMPLE_RC_E    enRcMode;   
   
    /* variable value */
    for(i=0; i     {
        for(j=0; j<2; j++)
        {
            grp[j] = j;
        }
    }
    //enPayLoad = PT_H264;
    enRcMode  = SAMPLE_RC_VBR;
   
#if 1//ACC Init
    /*acc variable*/
    HI_S32 aud_mode          = 1;
    HI_S32 aud_sampling_rate = 1;
    HI_S32 aud_bit_rate      = 1;
//    fun();
    InitAcc(aud_mode, aud_sampling_rate, aud_bit_rate);//初始化ACC编码函数
#endif  
#if 1
    /* audio */
    VB_CONF_S stVbConf;
   
    /*** 音频初始化 ***/
    memset(&stVbConf, 0, sizeof(VB_CONF_S));
    s32Ret = SAMPLE_COMM_SYS_Init(&stVbConf);
    if (HI_SUCCESS != s32Ret)
    {
        printf("%s: system init failed with %d!\n", __FUNCTION__, s32Ret);
        return HI_FAILURE;
    }
   
    JY3531A_AUDIO_AiAenc();//音频获取编码保存
#endif

    /* function */
    VencChn = 0;  
    for(i=0; i     {
        VpssGrp = i;
        for(j=0; j<2; j++)
        {
            if(grp[j] == 0)
            {
                s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad, gs_enNorm, enSize[0], enRcMode, u32Profile);
                if (HI_SUCCESS != s32Ret)
                {
                    SAMPLE_PRT("Start Venc failed!\n");
                    goto END;
                }
               
                s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn,VpssGrp, 0);
                if (HI_SUCCESS != s32Ret)
                {
                    SAMPLE_PRT("Start Venc failed!\n");
                    goto END;
                }
                        printf("encode Bind %d,%d,%d\r\n",VencChn,VpssGrp,0);
                        VencChn ++;                           
            }else if(grp[j] == 1)
            {
                    s32Ret = SAMPLE_COMM_VENC_Start(VencChn, enPayLoad, gs_enNorm, enSize[1], enRcMode, u32Profile);
                    if (HI_SUCCESS != s32Ret)
                    {
                        SAMPLE_PRT("Start Venc failed!\n");
                        goto END;
                    }

                    s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, 1);
                    if (HI_SUCCESS != s32Ret)
                    {
                        SAMPLE_PRT("Start Venc failed!\n");
                        goto END;
                    }
                         printf("encode Bind %d,%d,%d\r\n",VencChn,VpssGrp,1);
                         VencChn ++;               
            }else
            {
                goto END;
            }
        }//j out
    }//i out

    /* step : get stream from video */
    s32Ret = SAMPLE_COMM_VENC_StartGetStream(12);//(VPSSGRPCNT*2);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Venc failed!\n");
        goto END;
    }

    printf("please press twice ENTER to exit this sample\n");
    getchar();
    getchar();

    /* step : recycle resource */
    SAMPLE_COMM_VENC_StopGetStream();
   
   
END://销毁设备资源
    VencChn = 0;
        for (i=0; i         {
            VpssGrp = i;
        for(j=0; j<2; j++)
        {
            if(grp[j]==j)
            {
                        SAMPLE_COMM_VENC_UnBindVpss(VencChn, VpssGrp, j);
                        SAMPLE_COMM_VENC_Stop(VencChn);
                        VencChn++;
            }
        }
        }
       
    s32Ret = SAMPLE_COMM_AUDIO_DestoryTrdAencAdec(AdChn);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }       

    for (i=0; i     {
        AeChn = i;
        AiChn = i;

        if (HI_TRUE == gs_bUserGetMode)
        {
            s32Ret = SAMPLE_COMM_AUDIO_DestoryTrdAi(AiDev, AiChn);
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_DBG(s32Ret);
                return HI_FAILURE;
            }
        }
        else
        {        
            s32Ret = SAMPLE_COMM_AUDIO_AencUnbindAi(AiDev, AiChn, AeChn);
            if (s32Ret != HI_SUCCESS)
            {
                SAMPLE_DBG(s32Ret);
                return HI_FAILURE;
            }
        }
    }
   
    s32Ret = SAMPLE_COMM_AUDIO_StopAenc(s32AencChnCnt);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }
   
    s32Ret = SAMPLE_COMM_AUDIO_StopAi(AiDev, s32AiChnCnt, HI_FALSE, HI_FALSE);
    if (s32Ret != HI_SUCCESS)
    {
        SAMPLE_DBG(s32Ret);
        return HI_FAILURE;
    }
       
    return s32Ret;
}

/*** 获取的音频数据acc编码处理 ***/
int push_audio(unsigned char *data, size_t size)
{
    //printf("PCM: %d\n", size);
        uint8_t inbuf[4096];
   
        AACENC_BufDesc in_buf = { 0 }, out_buf = { 0 };
        AACENC_InArgs in_args = { 0 };
        AACENC_OutArgs out_args = { 0 };  
        AACENC_ERROR err;
        void *in_ptr, *out_ptr;
        int in_size, in_elem_size;       
        int in_identifier = IN_AUDIO_DATA;
        int out_identifier = OUT_BITSTREAM_DATA;
        int out_size, out_elem_size;
        uint8_t outbuf[2048];
       
        int aud_mode = 1;
        int i;  
    if (aud_mode ==2)
        {
                for (i=0;i<1024;i++)
                {
                        inbuf[i*4] = data[i*2];
                        inbuf[i*4+1] = data[i*2+1];
                        inbuf[i*4+2] = data[i*2];
                        inbuf[i*4+3] = data[i*2+1];
                }
                in_ptr = inbuf;
        }
        else
                in_ptr = data;                
                  
        in_size = size*aud_mode;
        in_elem_size = 2;

        in_args.numInSamples = size;//*hiConfig.aud_mode;
        in_buf.numBufs = 1;
        in_buf.bufs = &in_ptr;
        in_buf.bufferIdentifiers = &in_identifier;
        in_buf.bufSizes = &in_size;
        in_buf.bufElSizes = &in_elem_size;

        out_ptr = outbuf;
        out_size = sizeof(outbuf);
        out_elem_size = 1;
        out_buf.numBufs = 1;
        out_buf.bufs = &out_ptr;
        out_buf.bufferIdentifiers = &out_identifier;
        out_buf.bufSizes = &out_size;
        out_buf.bufElSizes = &out_elem_size;
//
#if 0
        if ((err = aacEncEncode(handle, &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK)
        {
                out_args.numOutBytes = 0;
                if (err == AACENC_ENCODE_EOF)
                        ;
                else
                        fprintf(stderr, "Encoding failed\n");
        }

        if (out_args.numOutBytes == 0)
        {
                if ((err = aacEncEncode(handle, &in_buf, &out_buf, &in_args, &out_args)) != AACENC_OK)
                {
                        out_args.numOutBytes = 0;
                        if (err == AACENC_ENCODE_EOF)
                                ;
                        else
                                fprintf(stderr, "Encoding failed\n");
                }
        }
#endif       
        //if (out_args.numOutBytes > 0)
        //{
        //        func_LIVESVR_SetAudioData((char*)outbuf,out_args.numOutBytes,(int)fAudioTimeTick );
        //        printf("audio %d,%d\n", nAudioCount,(int)fAudioTimeTick);
            printf("size: %d------------numOutBytes: %d\n", size, out_args.numOutBytes);
        //}       

    return 0;
}



[/code][postbg]1.jpg[/postbg]
目前SAMPLE_XXXXX的函数调用于SDK的mpp/sample/common目录中

另附上 根据audio sample的配置方式 再次初始化sample_sys_init的话 错误如下:
   个人分析是因为再次初始化 讲视频的vb块 buffer等消除了的缘故



zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-17 14:01:55
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41383&ptid=13363]localhost 发表于 2016-11-17 13:07[/url]
系统输入法坏掉了 刚弄好我把修改的代码附上并配了注释 请前辈指导一下谢谢啦

目前SAMPLE_XXXXX的函 ...[/quote]

楼主的代码是要做什么呢?

venc绑定了vpss, 意思venc的数据源是vpss, 那么vpss的数据源呢? 没人给vpss送数据, venc怎么会有码流呢?

楼主要测试音视频同时编码, 先要把数据源搞对
一般来说vpss-->venc前面的数据源是vi/vdec, 即 vi-->vpss-->venc, 或者 vdec-->vpss-->venc(注意这里实际的数据源是程序送的码流, 可以理解为 sendstream-->vdec-->vpss-->venc)
还有一种是手工送图 sendframe-->vpss-->venc

另外,“/*** 音频初始化 ***/”的注释是会害人的,  SAMPLE_COMM_SYS_Init()是系统初始化,和音频没有直接的关系,音视频同时编码的情况, 使用视频编码的初始化即可(主要是分配VB)

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-17 14:10:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41385&ptid=13363]zhuangweiye 发表于 2016-11-17 14:01[/url]
楼主的代码是要做什么呢?

venc绑定了vpss, 意思venc的数据源是vpss, 那么vpss的数据源呢? 没人给vpss ...[/quote]

哦 抱歉 是这样的 别人把视频源单独提出来 写了一个程序
所以我只能固定把vi与vpss绑定 获取  我只有音频是从ai开始操作的
那个音频初始化 是想说 这部分是根据 sample_audio中搬移过来的区分作用

根据前辈的意思 那我是不是可以认为 对与音频部分 是不涉及系统初始化部分的资源
音频只要有HI_MPI_SYS_INIT这部分就可以了呢

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-17 14:14:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41385&ptid=13363]zhuangweiye 发表于 2016-11-17 14:01[/url]
楼主的代码是要做什么呢?

venc绑定了vpss, 意思venc的数据源是vpss, 那么vpss的数据源呢? 没人给vpss ...[/quote]

目前 我想实现的就是 6路视频编码 以及一路音频的编码
我先是实现 6路视频编码 没有音频
然后 单独的音频编码获得pcm格式文件
接下来 将两个文件融合 实现视频与音频同时编码
最后将音频文件进行acc编码 保存备用

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-17 14:16:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41388&ptid=13363]localhost 发表于 2016-11-17 14:10[/url]
哦 抱歉 是这样的 别人把视频源单独提出来 写了一个程序
所以我只能固定把vi与vpss绑定 获取  我只有音 ...[/quote]


如果要写测试程序, 那么就必须写初始化, 不写海思芯片不工作.

如果楼主只是写音频的一部分代码, 那么根本不用 SAMPLE_COMM_SYS_Init(), 这个是系统初始化的东西, 把你的代码放到你们的音视频代码里面就可以了, 不用关心初始化的部分, 音频不涉及VB

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-17 14:24:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41390&ptid=13363]zhuangweiye 发表于 2016-11-17 14:16[/url]
如果要写测试程序, 那么就必须写初始化, 不写海思芯片不工作.

如果楼主只是写音频的一部分代码, 那 ...[/quote]

如果 我将初始化部分单独 运行呢
也就是我进行了mpp的初始化并设置好了vi 与vpss的绑定然后等待
这时我另一个程序从 配置编码并绑定 vpss开始进行 这样搭配可以么

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-17 14:39:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41391&ptid=13363]localhost 发表于 2016-11-17 14:24[/url]
如果 我将初始化部分单独 运行呢
也就是我进行了mpp的初始化并设置好了vi 与vpss的绑定然后等待
这时我 ...[/quote]

不是很理解楼主的想法

另一格程序是什么概念? 另一个进程? 有什么样的需求要把简单的音视频编码分到两个进程里面?

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-17 15:13:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41393&ptid=13363]zhuangweiye 发表于 2016-11-17 14:39[/url]
不是很理解楼主的想法

另一格程序是什么概念? 另一个进程? 有什么样的需求要把简单的音视频编码分到两 ...[/quote]

是两个进程 这个我也不是很理解 领导的想法 可能想日后 多个视频源然后多路编码

前辈 那您看下 上面操作 不考虑视频部分 单看音频操作 配置有错误的地方么

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-11-17 15:29:12
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41395&ptid=13363]localhost 发表于 2016-11-17 15:13[/url]
是两个进程 这个我也不是很理解 领导的想法 可能想日后 多个视频源然后多路编码

前辈 那您看下 上面操 ...[/quote]

还是看文档吧

HI_MPI_SYS_Init
【描述】
初始化MPP系统。除了音频的编解码通道外,所有的音频输入输出、视频输入输出、
视频编码、视频叠加区域、视频侦测分析等都会被初始化。
【注意】
1. 必须先调用HI_MPI_SYS_SetConf配置MPP系统后才能初始化,否则初始化会失败。
2. 由于MPP系统的正常运行依赖于缓存池,因此必须先调用HI_MPI_VB_Init 初始化缓存池,再初始化MPP系统。
3. 如果多次初始化,仍会返回成功,但实际上系统不会对MPP的运行状态有任何影响。
4. 只要有一个进程进行初始化即可,不需要所有的进程都做系统初始化的操作。

也就是说, 初始化只要一个进程做即可, 楼主的情况显然是视频的优先级高,因为视频需要开VB, 不过这就要求进程同步了

这个也太坑了吧, 这么简单的应用放不同的线程不就好了吗? 再说了, 多一路编码就多一个进程, 那么VB要怎么开呢?一次性开好?既然知道能开多少,也就知道最大是多少路视频喽,那么一个进程就解决了

话说回来了, 领导定的就让领导去费脑细胞吧 :lol

localhost

0个粉丝

16

问答

0

专栏

4

资料

localhost 2016-11-17 15:38:15
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=41397&ptid=13363]zhuangweiye 发表于 2016-11-17 15:29[/url]
还是看文档吧

HI_MPI_SYS_Init
[/quote]

确实如此 视频源路数 一次开好 比如 2路 4路 6路

现在我试验的表面现象和 这部分代码有关 我再找找其他 谢谢啦
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区