uclinux_2016

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016  发布于  2016-07-10 22:33:25
采纳率 0%
10个问答
7818

【已解决】OSD显示时戳时调用HI_MPI_RGN_AttachToChn返回失败

 
本帖最后由 uclinux_2016 于 2016-9-11 16:10 编辑

OSD实现时调用HI_MPI_RGN_AttachToChn返回失败,失败返回值是0xa01d8008 (HI_ERR_IVE_NOT_SUPPORT, 不支持的参数或者功能),哪位能指导下,多谢!

下面是实现代码:

#define SAMPLE_VENC_OSD_DEV_MAX 4
#define SAMPLE_VENC_OSD_DEV_NAME_MAXLEN 64

typedef struct sample_osd_ctlcb_s
{
        HI_U32 s32DevId;
        HI_U32 s32ChnId;
        HI_BOOL bOsdEnable;
    TTF_Font *pstTtfFont;
        VIDEO_NORM_E enNorm;
        PIC_SIZE_E enPicSize;
        HI_BOOL bUpdateDevName;
        HI_CHAR aDevName[SAMPLE_VENC_OSD_DEV_NAME_MAXLEN];  
}SAMPLE_OSD_CTLCB_S;

SAMPLE_OSD_CTLCB_S g_astOsdVencCtl[SAMPLE_VENC_OSD_DEV_MAX];


HI_S32 SAMPLE_OSD_VENC_Init(VOID)
{
        SAMPLE_OSD_CTLCB_S *pstOsdVencCtl;
        HI_U32 uiDev;

    if ( TTF_Init() < 0 )
    {
        fprintf(stderr, "Couldn't initialize TTF: %s\n", SDL_GetError());
        SDL_Quit();
        return HI_FAILURE;
    }
       
        for (uiDev = 0; uiDev < SAMPLE_VENC_OSD_DEV_MAX; uiDev++)
        {
                pstOsdVencCtl = &g_astOsdVencCtl[uiDev];
                memset(pstOsdVencCtl, sizeof(SAMPLE_OSD_CTLCB_S), 0);
                snprintf(pstOsdVencCtl->aDevName, SAMPLE_VENC_OSD_DEV_NAME_MAXLEN, "Device%02d", uiDev);
        }

        return HI_SUCCESS;
}


static HI_S32 SAMPLE_RGN_CreateOverlayForVenc(SAMPLE_OSD_CTLCB_S *pstOsdVencCtl)
{
    HI_S32 i;
    HI_S32 s32Ret;
    RGN_ATTR_S stRgnAttr;
    RGN_CHN_ATTR_S stChnAttr;
        RGN_HANDLE Handle;
        MPP_CHN_S stChn;
    HI_S32 w, h;
    SIZE_S picSize ;
       
    s32Ret = SAMPLE_COMM_SYS_GetPicSize(pstOsdVencCtl->enNorm, pstOsdVencCtl->enPicSize, &picSize);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("get picture size failed!\ninit osd mudule failed\n");
        return s32Ret;
    }

    /* Add cover to vpss group */
    stChn.enModId  = HI_ID_VENC;
    stChn.s32DevId = pstOsdVencCtl->s32DevId;
    stChn.s32ChnId = pstOsdVencCtl->s32ChnId;
       
    for (i = 0; i < 2; i++)
    {
        Handle = pstOsdVencCtl->s32DevId * 4 + pstOsdVencCtl->s32ChnId * 2+ i;
               
        TTF_SizeUTF8(pstOsdVencCtl->pstTtfFont, pstOsdVencCtl->aDevName, &w, &h);
        stRgnAttr.enType = OVERLAY_RGN;
        stRgnAttr.unAttr.stOverlay.enPixelFmt       = PIXEL_FORMAT_RGB_1555;
        stRgnAttr.unAttr.stOverlay.stSize.u32Width  = w + w%2 + 16;
        stRgnAttr.unAttr.stOverlay.stSize.u32Height = h + h%2;
        stRgnAttr.unAttr.stOverlay.u32BgColor       = 0x00000000;

        if (1 == i % 2)
        {
            TTF_SizeUTF8(pstOsdVencCtl->pstTtfFont, "2016-07-09 17:23:08", &w, &h);
            stRgnAttr.unAttr.stOverlay.stSize.u32Width  = w + w%2 + 16;
            stRgnAttr.unAttr.stOverlay.stSize.u32Height = h + h%2;
            stRgnAttr.unAttr.stOverlay.u32BgColor       = 0x00000000;
        }

        s32Ret = HI_MPI_RGN_Create(Handle, &stRgnAttr);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("HI_MPI_RGN_Create failed! s32Ret: 0x%x.\n", s32Ret);
            return s32Ret;
        }

        stChnAttr.bShow  = HI_TRUE;
        stChnAttr.enType = OVERLAY_RGN;
        stChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = 8;
        stChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = 18;
        stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha   = 0;//region bg alpha
        stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha   = 128;//text bg alpha
        stChnAttr.unChnAttr.stOverlayChn.u32Layer     = i;

        stChnAttr.unChnAttr.stOverlayChn.stQpInfo.bAbsQp = HI_FALSE;
        stChnAttr.unChnAttr.stOverlayChn.stQpInfo.s32Qp  = 0;

        stChnAttr.unChnAttr.stOverlayChn.stInvertColor.stInvColArea.u32Height = 16;
        stChnAttr.unChnAttr.stOverlayChn.stInvertColor.stInvColArea.u32Width  = 16;
        stChnAttr.unChnAttr.stOverlayChn.stInvertColor.u32LumThresh = 128;
        stChnAttr.unChnAttr.stOverlayChn.stInvertColor.enChgMod     = LESSTHAN_LUM_THRESH;
        stChnAttr.unChnAttr.stOverlayChn.stInvertColor.bInvColEn    = HI_FALSE;
        if (1 == i % 2)
        {
            stChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = (picSize.u32Width - (w + w%2 +16));
            stChnAttr.unChnAttr.stOverlayChn.stPoint.s32Y = 18;
            stChnAttr.unChnAttr.stOverlayChn.u32BgAlpha   = 0;//region bg alpha
            stChnAttr.unChnAttr.stOverlayChn.u32FgAlpha   = 128;//text bg alpha
            stChnAttr.unChnAttr.stOverlayChn.u32Layer     = i;
        }
               
        s32Ret = HI_MPI_RGN_AttachToChn(Handle, &stChn, &stChnAttr);
        if (s32Ret != HI_SUCCESS)
        {
                SAMPLE_PRT("rgn attach err\n");
        }
    }

    return HI_SUCCESS;

}

HI_S32 SAMPLE_OSD_VENC_ChanInit(HI_U32 s32DevId, HI_U32 s32ChnId, VIDEO_NORM_E enNorm, PIC_SIZE_E enPicSize)
{
        SAMPLE_OSD_CTLCB_S *pstOsdVencCtl = NULL;
    HI_S32 s32Ret = HI_SUCCESS;
    HI_S32 wordSize;
    HI_BOOL isOSDFlg = HI_TRUE;

        if (SAMPLE_VENC_OSD_DEV_MAX <= s32DevId)
        {
                SAMPLE_PRT("invalid dev ID %d\n", s32DevId);
        return HI_FAILURE;
        }

        pstOsdVencCtl = &g_astOsdVencCtl[s32DevId];

        pstOsdVencCtl->s32DevId       = s32DevId;
        pstOsdVencCtl->s32ChnId       = s32ChnId;
        pstOsdVencCtl->enNorm         = enNorm;
        pstOsdVencCtl->enPicSize      = enPicSize;
        pstOsdVencCtl->bOsdEnable     = HI_TRUE;
        pstOsdVencCtl->bUpdateDevName = HI_TRUE;
       
    switch(enPicSize)
        {
        case PIC_QVGA:
            wordSize = 12;
            break;
                case PIC_D1:
        case PIC_VGA:
            wordSize = 16;
            break;
        case PIC_XGA:
            wordSize = 24;
            break;
        case PIC_HD720:
            wordSize = 32;
            break;
        case PIC_HD1080:
            wordSize = 48;
            break;
        default:
            SAMPLE_PRT("video size err,not support osd time\n");
            break;
    }
       
    pstOsdVencCtl->pstTtfFont = TTF_OpenFont("word.ttf", wordSize);
    if (pstOsdVencCtl->pstTtfFont == NULL )
    {
        SAMPLE_PRT("ttf open err\n");
        return HI_FAILURE;
    }
       
    s32Ret = SAMPLE_RGN_CreateOverlayForVenc(pstOsdVencCtl);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_RGN_CreateOverlayForVenc failed! s32Ret: 0x%x.\n", s32Ret);
        return s32Ret;
    }
       
    return HI_SUCCESS;
}


/******************************************************************************
* function :  4HD H264 encode
******************************************************************************/
HI_S32 SAMPLE_VENC_4HD_H264(HI_VOID)
{
    SAMPLE_VI_MODE_E enViMode = SAMPLE_VI_MODE_4_1080P;

    HI_U32 u32ViChnCnt = 4;
    HI_S32 s32VpssGrpCnt = 4;
    PAYLOAD_TYPE_E enPayLoad[2]= {PT_H264, PT_H264};
    PIC_SIZE_E enSize[2] = {PIC_HD1080, PIC_D1};
   
    VB_CONF_S stVbConf;
    VPSS_GRP VpssGrp;
    VPSS_CHN VpssChn;
    VPSS_GRP_ATTR_S stGrpAttr;
    VENC_GRP VencGrp;
    VENC_CHN VencChn;
    SAMPLE_RC_E enRcMode;
   
    HI_S32 i;
    HI_S32 s32Ret = HI_SUCCESS;
    HI_U32 u32BlkSize;
    HI_CHAR ch;
    SIZE_S stSize;

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

    u32BlkSize = SAMPLE_COMM_SYS_CalcPicVbBlkSize(gs_enNorm,\
                PIC_HD1080, SAMPLE_PIXEL_FORMAT, SAMPLE_SYS_ALIGN_WIDTH);
    stVbConf.u32MaxPoolCnt = 128;

    /*ddr0 video buffer*/
    stVbConf.astCommPool[0].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[0].u32BlkCnt = u32ViChnCnt * 16;
    memset(stVbConf.astCommPool[0].acMmzName,0,
        sizeof(stVbConf.astCommPool[0].acMmzName));

    /*ddr0 hist buf*/
    stVbConf.astCommPool[1].u32BlkSize = (196*4);
    stVbConf.astCommPool[1].u32BlkCnt = u32ViChnCnt * 16;
    memset(stVbConf.astCommPool[1].acMmzName,0,
        sizeof(stVbConf.astCommPool[1].acMmzName));

    /*ddr1 video buffer*/
    stVbConf.astCommPool[2].u32BlkSize = u32BlkSize;
    stVbConf.astCommPool[2].u32BlkCnt = u32ViChnCnt * 16;
    strcpy(stVbConf.astCommPool[2].acMmzName,"ddr1");

    /*ddr1 hist buf*/
    stVbConf.astCommPool[3].u32BlkSize = (196*4);
    stVbConf.astCommPool[3].u32BlkCnt = u32ViChnCnt * 16;
    strcpy(stVbConf.astCommPool[3].acMmzName,"ddr1");

    /******************************************
     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_4HD_0;
    }

    s32Ret = SAMPLE_COMM_VI_MemConfig(enViMode);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VI_MemConfig failed with %d!\n", s32Ret);
        goto END_VENC_4HD_0;
    }
    s32Ret = SAMPLE_COMM_VPSS_MemConfig();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VPSS_MemConfig failed with %d!\n", s32Ret);
        goto END_VENC_4HD_0;
    }
   
    s32Ret = SAMPLE_COMM_VENC_MemConfig();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_VPSS_MemConfig failed with %d!\n", s32Ret);
        goto END_VENC_4HD_0;
    }
   
    /******************************************
     step 3: start vi dev & chn to capture
    ******************************************/
    s32Ret = SAMPLE_COMM_VI_Start(enViMode, gs_enNorm);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("start vi failed!\n");
        goto END_VENC_4HD_0;
    }
   
    /******************************************
     step 4: start vpss and vi bind vpss
    ******************************************/
    s32Ret = SAMPLE_COMM_SYS_GetPicSize(gs_enNorm, PIC_HD1080, &stSize);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("SAMPLE_COMM_SYS_GetPicSize failed!\n");
        goto END_VENC_4HD_0;
    }
   
    stGrpAttr.u32MaxW = stSize.u32Width;
    stGrpAttr.u32MaxH = stSize.u32Height;
    stGrpAttr.bDrEn = HI_FALSE;
    stGrpAttr.bDbEn = HI_FALSE;
    stGrpAttr.bIeEn = HI_TRUE;
    stGrpAttr.bNrEn = HI_TRUE;
    stGrpAttr.bHistEn = HI_TRUE;
    stGrpAttr.enDieMode = VPSS_DIE_MODE_AUTO;
    stGrpAttr.enPixFmt = SAMPLE_PIXEL_FORMAT;

    s32Ret = SAMPLE_COMM_VPSS_Start(s32VpssGrpCnt, &stSize, VPSS_MAX_CHN_NUM,NULL);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Vpss failed!\n");
        goto END_VENC_4HD_1;
    }

    s32Ret = SAMPLE_COMM_VI_BindVpss(enViMode);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Vi bind Vpss failed!\n");
        goto END_VENC_4HD_2;
    }
       
    s32Ret = SAMPLE_OSD_VENC_Init();
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Initialize OSD VENC failed!\n");
        goto END_VENC_4HD_2;
    }
       
    /******************************************
     step 5: select rc mode
    ******************************************/
    while(1)
    {
        printf("please choose rc mode:\n");
        printf("\t0) CBR\n");
        printf("\t1) VBR\n");
        printf("\t2) FIXQP\n");
        ch = getchar();
        getchar();
        if ('0' == ch)
        {
            enRcMode = SAMPLE_RC_CBR;
            break;
        }
        else if ('1' == ch)
        {
            enRcMode = SAMPLE_RC_VBR;
            break;
        }
        else if ('2' == ch)
        {
            enRcMode = SAMPLE_RC_FIXQP;
            break;
        }
        else
        {
            printf("rc mode invaild! please try again.\n");
            continue;
        }
    }
    /******************************************
     step 6: start stream venc (big + little)
    ******************************************/
    for (i=0; i     {
        /*** main frame **/
        VencGrp = i*2;
        VencChn = i*2;
        VpssGrp = i;
        s32Ret = SAMPLE_COMM_VENC_Start(VencGrp, VencChn, enPayLoad[0],\
                                        gs_enNorm, enSize[0], enRcMode);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Start Venc failed!\n");
            goto END_VENC_4HD_3;
        }

        s32Ret = SAMPLE_COMM_VENC_BindVpss(VencGrp, VpssGrp, VPSS_BSTR_CHN);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Start Venc failed!\n");
            goto END_VENC_4HD_3;
        }
               
        s32Ret = SAMPLE_OSD_VENC_ChanInit(VencGrp, VpssGrp, gs_enNorm, enSize[0]);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Initialize OSD VENC channel failed 0 !\n");
            goto END_VENC_4HD_3;
        }

        /*** Sub frame **/
        VencGrp ++;
        VencChn ++;
        s32Ret = SAMPLE_COMM_VENC_Start(VencGrp, VencChn, enPayLoad[1], \
                                     gs_enNorm, enSize[1], enRcMode);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Start Venc failed!\n");
            goto END_VENC_4HD_3;
        }

        s32Ret = SAMPLE_COMM_VENC_BindVpss(VencChn, VpssGrp, VPSS_LSTR_CHN);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Start Venc failed!\n");
            goto END_VENC_4HD_3;
        }

                s32Ret = SAMPLE_OSD_VENC_ChanInit(VencGrp, VpssGrp, gs_enNorm, enSize[1]);
        if (HI_SUCCESS != s32Ret)
        {
            SAMPLE_PRT("Initialize OSD VENC channel failed 0 !\n");
            goto END_VENC_4HD_3;
        }
    }

    /******************************************
     step 7: stream venc process -- get stream, then save it to file.
    ******************************************/
    s32Ret = SAMPLE_COMM_VENC_StartGetStream(u32ViChnCnt*2);
    if (HI_SUCCESS != s32Ret)
    {
        SAMPLE_PRT("Start Venc failed!\n");
        goto END_VENC_4HD_3;
    }

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

    /******************************************
     step 8: exit process
    ******************************************/
    SAMPLE_COMM_VENC_StopGetStream();
   
END_VENC_4HD_3:
    for (i=0; i     {
        VencGrp = i;
        VencChn = i;
        VpssGrp = i/2;
        VpssChn = (VpssGrp%2)?VPSS_PRE0_CHN:VPSS_BSTR_CHN;
        SAMPLE_COMM_VENC_UnBindVpss(VencGrp, VpssGrp, VpssChn);
        SAMPLE_COMM_VENC_Stop(VencGrp,VencChn);
    }
    SAMPLE_COMM_VI_UnBindVpss(enViMode);
END_VENC_4HD_2:        //vpss stop
    SAMPLE_COMM_VPSS_Stop(s32VpssGrpCnt, VPSS_MAX_CHN_NUM);
END_VENC_4HD_1:        //vi stop
    SAMPLE_COMM_VI_Stop(enViMode);
END_VENC_4HD_0:        //system exit
    SAMPLE_COMM_SYS_Exit();
   
    return s32Ret;
}

我来回答
回答16个
时间排序
认可量排序

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-11 08:06:58
认可0
stChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = (picSize.u32Width - (w + w%2 +16));

把这个值打印出来

这个要求2对齐

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-07-12 22:28:56
认可0
试过将这个值直接设成180,错误还是一样的啊。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-07-13 08:12:39
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33832&ptid=11900]uclinux_2016 发表于 2016-7-12 22:28[/url]
试过将这个值直接设成180,错误还是一样的啊。[/quote]

抱歉,可能没描述清楚

文档上这样说:
HI_S32 HI_MPI_RGN_Create(RGN_HANDLE Handle,const RGN_ATTR_S *pstRegion);
创建区域时,本接口只进行基本的参数的检查,譬如:最小宽高,最大宽高等;
当区域attach 到通道上时,根据各通道模块支持类型的约束条件进行更加有针对
性的参数检查,譬如支持的像素格式等;

也就是说用HI_MPI_RGN_AttachToChn()时才真正检查create的时候的参数地有效性
也就包括RGN的起始位置(attach时设定)和宽高(create时设定)都要求2对齐

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-07-31 16:44:24
认可0
使用的是1080P模式,得到的picSize.u32Width和picSize.u32Height分别为1920和1080.
打印出来的信息TTF_SizeUTF8(pstOsdVencCtl->pstTtfFont, pstOsdVencCtl->aDevName, &w, &h);得到的w和h值分别是192和60,计算后u32Width和u32Height的值分别为208和60。
可是返回值还是0xa0128008。不知道哪个参数不合适了。请帮忙指导下,多谢!

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-07-31 16:47:05
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33838&ptid=11900]zhuangweiye 发表于 2016-7-13 08:12[/url]
抱歉,可能没描述清楚

文档上这样说:
[/quote]


使用的是1080P模式,得到的picSize.u32Width和picSize.u32Height分别为1920和1080.
打印出来的信息TTF_SizeUTF8(pstOsdVencCtl->pstTtfFont, pstOsdVencCtl->aDevName, &w, &h);得到的w和h值分别是192和60,计算后u32Width和u32Height的值分别为208和60。
可是返回值还是0xa0128008。不知道哪个参数不合适了。请帮忙指导下,多谢!

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-07-31 17:15:29
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=33652&ptid=11900]zhuangweiye 发表于 2016-7-11 08:06[/url]
stChnAttr.unChnAttr.stOverlayChn.stPoint.s32X = (picSize.u32Width - (w + w%2 +16));

把这个值打印 ...[/quote]

这个值打出来是1448,似乎也木有问题啊。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-01 08:05:41
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35168&ptid=11900]uclinux_2016 发表于 2016-7-31 17:15[/url]
这个值打出来是1448,似乎也木有问题啊。[/quote]

楼主的错误码到底是多少?

0xa0128008? 文档翻三遍没看到, 难道有新东西了?
0xa01d8008? IVE的错误, 这个和OSD没关系吧

能不能把出错的代码行数给一下便于分析

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-08-01 22:15:26
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35187&ptid=11900]zhuangweiye 发表于 2016-8-1 08:05[/url]
楼主的错误码到底是多少?

0xa0128008? 文档翻三遍没看到, 难道有新东西了?
[/quote]

  s32Ret = HI_MPI_RGN_AttachToChn(Handle, &stChn, &stChnAttr);
        if (s32Ret != HI_SUCCESS)
        {
                SAMPLE_PRT("rgn attach err\n"); ----->出错位置
        }

0xA0128008 HI_ERR_RGN_NOT_SUPPORT 不支持的参数或者功能
我用的是3531的sdk和文档。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-02 08:01:28
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35260&ptid=11900]uclinux_2016 发表于 2016-8-1 22:15[/url]
s32Ret = HI_MPI_RGN_AttachToChn(Handle, &stChn, &stChnAttr);
        if (s32Ret != HI_SUCCESS)
...[/quote]

仔细看了一下楼主代码, 有个疑问

调用的地方是
s32Ret = SAMPLE_OSD_VENC_ChanInit(VencGrp, VpssGrp, gs_enNorm, enSize[0]);
函数原形是
HI_S32 SAMPLE_OSD_VENC_ChanInit(HI_U32 s32DevId, HI_U32 s32ChnId, VIDEO_NORM_E enNorm, PIC_SIZE_E enPicSize)

很好奇, VpssGrp 是楼主希望传入的参数吗?
好像这里应该是venc_chn比较合理



uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-08-02 22:35:51
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35265&ptid=11900]zhuangweiye 发表于 2016-8-2 08:01[/url]
仔细看了一下楼主代码, 有个疑问

调用的地方是
[/quote]

确实是个问题。不过当i=0时,这两个值都是0,值是一样的。不知道为啥还是失败啊。郁闷。。。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-03 07:55:52
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35331&ptid=11900]uclinux_2016 发表于 2016-8-2 22:35[/url]
确实是个问题。不过当i=0时,这两个值都是0,值是一样的。不知道为啥还是失败啊。郁闷。。。[/quote]

楼主的代码是4路主子码流一共8个VENC

是第一个VENC attach就失败吗?

建议楼主多加几句打印, 看看到底是哪个VENC的时候出错, 海思OSD很容易搞, 仔细点不会有问题的

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-08-03 20:22:30
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35337&ptid=11900]zhuangweiye 发表于 2016-8-3 07:55[/url]
楼主的代码是4路主子码流一共8个VENC

是第一个VENC attach就失败吗?
[/quote]

是的,第一个就失败了啊,按说输入的都是0,不应该有问题的。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-04 08:27:21
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35412&ptid=11900]uclinux_2016 发表于 2016-8-3 20:22[/url]
是的,第一个就失败了啊,按说输入的都是0,不应该有问题的。[/quote]

stChn.enModId  = HI_ID_VENC;

楼主用的3531 ? 那么是不是应该是
stChn.enModId = HI_ID_GROUP;

stChn.enModId  = HI_ID_VENC; 这个是对应MPP2.0/3.0的

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-08-05 19:55:03
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35430&ptid=11900]zhuangweiye 发表于 2016-8-4 08:27[/url]
stChn.enModId  = HI_ID_VENC;

楼主用的3531 ? 那么是不是应该是
[/quote]

HI_ID_GROUP也试过,改成这个值之后返回的错误码变成了0xa0128003,HI_ERR_RGN_ILLEGAL_PARAM 参数超出合法范围,可是我检查了下输出,似乎没有超出范围啊。难道也是3531的特殊之处?

uclinux_2016

0个粉丝

10

问答

0

专栏

1

资料

uclinux_2016 2016-08-07 17:11:45
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=35594&ptid=11900]uclinux_2016 发表于 2016-8-5 19:55[/url]
HI_ID_GROUP也试过,改成这个值之后返回的错误码变成了0xa0128003,HI_ERR_RGN_ILLEGAL_PARAM 参数超出合 ...[/quote]

修改s32X和s32Y为16字节对齐后可以正常显示英文字符和阿拉伯数字了。但是中文却无法显示,显示的是无效字符。

zhuangweiye

8个粉丝

0

问答

0

专栏

0

资料

zhuangweiye 2016-08-08 08:40:22
认可0
本帖最后由 zhuangweiye 于 2016-8-8 08:41 编辑

[quote][url=forum.php?mod=redirect&goto=findpost&pid=35670&ptid=11900]uclinux_2016 发表于 2016-8-7 17:11[/url]
修改s32X和s32Y为16字节对齐后可以正常显示英文字符和阿拉伯数字了。但是中文却无法显示,显示的是无效字 ...[/quote]

显示成功就是很大的进步啊, 先恭喜一下


海思可不能识别是中文还是英文, 这个应该是字库的问题吧
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区