laqbbb

laqbbb

0个粉丝

1

问答

0

专栏

0

资料

laqbbb  发布于  2016-10-13 15:59:45
采纳率 0%
1个问答
7001

Hi3518c出现 get venc stream time out, exit thread

 
使用同样的测试程序,在Hi3518c+ar0130上正常运行,在Hi3518c+imx138上报错如下,请问大神们可能是什么原因导致的?十分感谢!


step  1: init sys variable
step 2: mpp system init.
step 3: start vi dev & chn to capture
-------Sony IMX138 Sensor Initial OK!-------
step 4: start vpss and vi bind vpss
step 5: start stream venc
step 6: stream venc process -- get stream, then save it to file.
please press twice ENTER to exit this sample
[SAMPLE_COMM_VENC_GetVencStreamProc]-964: get venc stream time out, exit thread
[SAMPLE_COMM_VENC_GetVencStreamProc]-964: get venc stream time out, exit thread
[SAMPLE_COMM_VENC_GetVencStreamProc]-964: get venc stream time out, exit thread
[SAMPLE_COMM_VENC_GetVencStreamProc]-964: get venc stream time out, exit thread


以下是/proc/vi的打印


[VIU] Version: [Hi3518_MPP_V1.0.A.0 ], Build Time: [Apr  1 2015, 19:37:35]

-----MODULE PARAM--------------------------------------------------------------
detect_err_frame drop_err_frame stop_int_level  max_cas_gap
               0              0              0        28000

-----VI DEV ATTR---------------------------------------------------------------
Dev   IntfM  WkM  ComMsk0  ComMsk1 ScanM AD0 AD1 AD2 AD3   Seq   DPath DType DRev
   0      DC 1Mux fff00000        0     P  -1  -1  -1  -1  YUYV     ISP   RGB    N

-----VI HIGH DEV ATTR---------------------------------------------------------------
Dev  InputM  WkM  ComMsk0  ComMsk1 ScanM AD0 AD1 AD2 AD3   Seq CombM CompM ClkM  Fix FldP   DPath DType DRev

-----VI PHYCHN ATTR------------------------------------------------------------
PhyChn CapX CapY  CapW  CapH  DstW  DstH CapSel Mirror Flip IntEn PixFom SrcRat DstRat
      0    0    0  1280   720  1280   720   both      N    N     Y  sp420     30     30

-----VI PHYCHN STATUS 1----------------------------------------------------------
PhyChn  Dev      IntCnt  VbFail  LosInt  TopLos  BotLos BufCnt  IntT  SendT  Field  Stride
      0    0           0       0       0       0       0      0     0      0 (null)       0

-----VI PHYCHN STATUS 2---------------------------------------------------------
PhyChn MaxIntT IntGapT MaxGapT OverCnt LIntCnt  ThrCnt AutoDis CasAutD  TmgErr      ccErrN    IntRat
      0       0       0       0       0       0       0       0       0       0           0         0

-----VI OTHER ATTR------------------------------------------------------------
    LDC   Mode  Ratio  COffX  COffY Enable
     --    All      0      0      0      0

  Flash   Mode StartTime  DuraTime  InterVal CapIdx Enable  FlashedNum
     --   Once         0         0         0      0      0           0

    CSC   Type HueVal  ContrVal   LumaVal  StatuVal
     --    709     50        50        50        50

-----VI EXTCHN ATTR------------------------------------------------------------
ExtChn BindChn  DstW  DstH PixFom SrcRat DstRat

-----VI CHN STATUS-------------------------------------------------------------
ViChn   bEnUsrP   FrmTime   FrmRate     SendCnt      SwLost    Rotate  422to420
     0         N         0         0           0           0      NONE         N

-----VI CHN CALL DSU STATUS 1-------------------------------------------------
ViChn   UsrBgnNOk   UsrCancel    UsrEndOk     UsrCbOk     CvrBgnNOk   CvrCancel    CvrEndOk     CvrCbOk

-----VI CHN CALL DSU STATUS 2-------------------------------------------------
ViChn   OsdBgnNOk   OsdCancel    OsdEndOk     OsdCbOk      ScaleNOk   SclCancel    SclEndOk     SclCbOk

-----VI CHN CALL DSU STATUS 3-------------------------------------------------
ViChn   RotateNOk   RotCancel    RotEndOk     RotCbOk        LDCNOk   LDCCancel    LDCEndOk     LDCCbOk
我来回答
回答2个
时间排序
认可量排序

2272943826

0个粉丝

24

问答

0

专栏

8

资料

2272943826 2016-10-14 08:58:53
认可0
看起来像 sample_comm_venc.c  
里面的 第 1118 行  

s32Ret = select(maxfd + 1, &read_fds, NULL, NULL, &TimeoutVal);
参数的配置, 检验 s32Ret 的数值。


/******************************************************************************
* funciton : get svc_t stream from h264 channels and save them
******************************************************************************/
HI_VOID* SAMPLE_COMM_VENC_GetVencStreamProc_Svc_t(void* p)
{
    HI_S32 i = 0;
    HI_S32 s32Cnt = 0;
    HI_S32 s32ChnTotal;
    VENC_CHN_ATTR_S stVencChnAttr;
    SAMPLE_VENC_GETSTREAM_PARA_S* pstPara;
    HI_S32 maxfd = 0;
    struct timeval TimeoutVal;
    fd_set read_fds;
    HI_S32 VencFd[VENC_MAX_CHN_NUM];
    HI_CHAR aszFileName[VENC_MAX_CHN_NUM][64];
    FILE* pFile[VENC_MAX_CHN_NUM];
    char szFilePostfix[10];
    VENC_CHN_STAT_S stStat;
    VENC_STREAM_S stStream;
    HI_S32 s32Ret;
    VENC_CHN VencChn;
    PAYLOAD_TYPE_E enPayLoadType[VENC_MAX_CHN_NUM];

    pstPara = (SAMPLE_VENC_GETSTREAM_PARA_S*)p;
    s32ChnTotal = pstPara->s32Cnt;

    /******************************************
     step 1:  check & prepare save-file & venc-fd
    ******************************************/
    if (s32ChnTotal >= VENC_MAX_CHN_NUM)
    {
        SAMPLE_PRT("input count invaild\n");
        return NULL;
    }
    for (i = 0; i < s32ChnTotal; i++)
    {
        /* decide the stream file name, and open file to save stream */
        VencChn = i;
        s32Ret = HI_MPI_VENC_GetChnAttr(VencChn, &stVencChnAttr);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("HI_MPI_VENC_GetChnAttr chn[%d] failed with %#x!\n", \
                       VencChn, s32Ret);
            return NULL;
        }
        enPayLoadType = stVencChnAttr.stVeAttr.enType;

        s32Ret = SAMPLE_COMM_VENC_GetFilePostfix(enPayLoadType, szFilePostfix);
        if (s32Ret != HI_SUCCESS)
        {
            SAMPLE_PRT("SAMPLE_COMM_VENC_GetFilePostfix [%d] failed with %#x!\n", \
                       stVencChnAttr.stVeAttr.enType, s32Ret);
            return NULL;
        }
        for (s32Cnt = 0; s32Cnt < 3; s32Cnt++)
        {
            snprintf(aszFileName[i + s32Cnt], FILE_NAME_LEN, "Tid%d%s", i + s32Cnt, szFilePostfix);
            pFile[i + s32Cnt] = fopen(aszFileName[i + s32Cnt], "wb");

            if (!pFile[i + s32Cnt])
            {
                SAMPLE_PRT("open file[%s] failed!\n",
                           aszFileName[i + s32Cnt]);
                return NULL;
            }
        }

        /* Set Venc Fd. */
        VencFd = HI_MPI_VENC_GetFd(i);
        if (VencFd < 0)
        {
            SAMPLE_PRT("HI_MPI_VENC_GetFd failed with %#x!\n",
                       VencFd);
            return NULL;
        }
        if (maxfd <= VencFd)
        {
            maxfd = VencFd;
        }
    }

    /******************************************
     step 2:  Start to get streams of each channel.
    ******************************************/
    while (HI_TRUE == pstPara->bThreadStart)
    {
        FD_ZERO(&read_fds);
        for (i = 0; i < s32ChnTotal; i++)
        {
            FD_SET(VencFd, &read_fds);
        }

        TimeoutVal.tv_sec  = 2;
        TimeoutVal.tv_usec = 0;
        s32Ret = select(maxfd + 1, &read_fds, NULL, NULL, &TimeoutVal);
        if (s32Ret < 0)
        {
            SAMPLE_PRT("select failed!\n");
            break;
        }
        else if (s32Ret == 0)
        {
            SAMPLE_PRT("get venc stream time out, exit thread\n");
            continue;
        }
        else
        {
            for (i = 0; i < s32ChnTotal; i++)
            {
                if (FD_ISSET(VencFd, &read_fds))
                {
                    /*******************************************************
                     step 2.1 : query how many packs in one-frame stream.
                    *******************************************************/
                    memset(&stStream, 0, sizeof(stStream));
                    s32Ret = HI_MPI_VENC_Query(i, &stStat);
                    if (HI_SUCCESS != s32Ret)
                    {
                        SAMPLE_PRT("HI_MPI_VENC_Query chn[%d] failed with %#x!\n", i, s32Ret);
                        break;
                    }
                                       
                                       
                                        /*******************************************************
                                         step 2.2 :suggest to check both u32CurPacks and u32LeftStreamFrames at the same time,for example:
                                         if(0 == stStat.u32CurPacks || 0 == stStat.u32LeftStreamFrames)
                                         {
                                                SAMPLE_PRT("NOTE: Current  frame is NULL!\n");
                                                continue;
                                         }
                                        *******************************************************/
                                        if(0 == stStat.u32CurPacks)
                                        {
                                                  SAMPLE_PRT("NOTE: Current  frame is NULL!\n");
                                                  continue;
                                        }
                    /*******************************************************
                     step 2.3 : malloc corresponding number of pack nodes.
                    *******************************************************/
                    stStream.pstPack = (VENC_PACK_S*)malloc(sizeof(VENC_PACK_S) * stStat.u32CurPacks);
                    if (NULL == stStream.pstPack)
                    {
                        SAMPLE_PRT("malloc stream pack failed!\n");
                        break;
                    }

                    /*******************************************************
                     step 2.4 : call mpi to get one-frame stream
                    *******************************************************/
                    stStream.u32PackCount = stStat.u32CurPacks;
                    s32Ret = HI_MPI_VENC_GetStream(i, &stStream, HI_TRUE);
                    if (HI_SUCCESS != s32Ret)
                    {
                        free(stStream.pstPack);
                        stStream.pstPack = NULL;
                        SAMPLE_PRT("HI_MPI_VENC_GetStream failed with %#x!\n", \
                                   s32Ret);
                        break;
                    }

                    /*******************************************************
                     step 2.5 : save frame to file
                    *******************************************************/
#if 1
                    for (s32Cnt = 0; s32Cnt < 3; s32Cnt++)
                    {

                        switch (s32Cnt)
                        {
                            case 0:
                                if (BASE_IDRSLICE == stStream.stH264Info.enRefType ||
                                    BASE_PSLICE_REFBYBASE == stStream.stH264Info.enRefType)
                                {
                                    s32Ret = SAMPLE_COMM_VENC_SaveStream(enPayLoadType, pFile[i + s32Cnt], &stStream);
                                }
                                break;

                            case 1:
                                if (BASE_IDRSLICE == stStream.stH264Info.enRefType      ||
                                    BASE_PSLICE_REFBYBASE == stStream.stH264Info.enRefType ||
                                    BASE_PSLICE_REFBYENHANCE == stStream.stH264Info.enRefType)
                                {
                                    s32Ret = SAMPLE_COMM_VENC_SaveStream(enPayLoadType, pFile[i + s32Cnt], &stStream);
                                }
                                break;

                            case 2:
                                s32Ret = SAMPLE_COMM_VENC_SaveStream(enPayLoadType, pFile[i + s32Cnt], &stStream);
                                break;
                        }


                        if (HI_SUCCESS != s32Ret)
                        {
                            free(stStream.pstPack);
                            stStream.pstPack = NULL;
                            SAMPLE_PRT("save stream failed!\n");
                            break;
                        }
                    }
#else

                    for (s32Cnt = 0; s32Cnt < 3; s32Cnt++)
                    {
                        if (s32Cnt == 0)
                        {
                            if (NULL != pFile[i + s32Cnt])
                            {
                                if (BASE_IDRSLICE == stStream.stH264Info.enRefType ||
                                    BASE_PSLICE_REFBYBASE == stStream.stH264Info.enRefType)
                                {
                                    s32Ret = SAMPLE_COMM_VENC_SaveStream(enPayLoadType, pFile[i + s32Cnt], &stStream);
                                }

                            }

                        }
                        else if (s32Cnt == 1)
                        {
                            if (NULL != pFile[i + s32Cnt])
                            {
                                if (BASE_IDRSLICE == stStream.stH264Info.enRefType         ||
                                    BASE_PSLICE_REFBYBASE == stStream.stH264Info.enRefType ||
                                    BASE_PSLICE_REFBYENHANCE == stStream.stH264Info.enRefType)
                                {
                                    s32Ret = SAMPLE_COMM_VENC_SaveStream(enPayLoadType, pFile[i + s32Cnt], &stStream);
                                }

                            }

                        }
                        else
                        {
                            if (NULL != pFile[i + s32Cnt])
                            {
                                s32Ret = SAMPLE_COMM_VENC_SaveStream(enPayLoadType, pFile[i + s32Cnt], &stStream);
                            }

                        }
                    }
                    if (HI_SUCCESS != s32Ret)
                    {
                        free(stStream.pstPack);
                        stStream.pstPack = NULL;
                        SAMPLE_PRT("save stream failed!\n");
                        break;
                    }
#endif
                    /*******************************************************
                     step 2.6 : release stream
                    *******************************************************/
                    s32Ret = HI_MPI_VENC_ReleaseStream(i, &stStream);
                    if (HI_SUCCESS != s32Ret)
                    {
                        free(stStream.pstPack);
                        stStream.pstPack = NULL;
                        break;
                    }
                    /*******************************************************
                     step 2.7 : free pack nodes
                    *******************************************************/
                    free(stStream.pstPack);
                    stStream.pstPack = NULL;
                }
            }
        }
    }

    /*******************************************************
     step 3 : close save-file
    *******************************************************/
    for (i = 0; i < s32ChnTotal; i++)
    {
        for (s32Cnt = 0; s32Cnt < 3; s32Cnt++)
        {
            if (pFile[i + s32Cnt])
            {
                fclose(pFile[i + s32Cnt]);
            }
        }
    }

    return NULL;
}

Joey

1个粉丝

15

问答

0

专栏

0

资料

Joey 2017-01-12 11:18:37
认可0
[quote][url=forum.php?mod=redirect&goto=findpost&pid=39413&ptid=12977]2272943826 发表于 2016-10-14 08:58[/url]
看起来像 sample_comm_venc.c  
里面的 第 1118 行  

[/quote]

大哥你好厉害,:o那你知道具体的原因么
或将文件直接拖到这里
悬赏:
E币
网盘
* 网盘链接:
* 提取码:
悬赏:
E币

Markdown 语法

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

Markdown 语法

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

举报类型

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

详细说明

易百纳技术社区