This thread has been locked.

If you have a related question, please click the "Ask a related question" button in the top right corner. The newly created question will be automatically linked to this question.

获取单路视频数据编码出错(恳请各位高手帮忙看一下问题)

各位TI大虾,

                  你们好!我是刚接触TI方案不久的新手,现在公司项目主要基于DM8168外部输入三路视频,需要录制三路单路视频数据,link流程逻辑如下图所示:

我直接在dup3处复制一份数据到merge5处,会出现enc编码错误,具体为:

[m3video] ENCLINK:ERROR in Enclink_h264EncodeFrameBatch.Status[-1] for IVAHD_1
[m3video] 51398:WARN
[m3video] ENC : IVAHDID : 1 ENCLINK:ERROR in EncLink_SubmitBatch.Status[-1]
[m3video] 51398:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[407]::INTERNAL ERROR:-1
[m3video] ALGPROCESS FAILED
[m3video] Number of Entries in Process List : 1
[m3video] Extended error for entry 0 : 0x4000
[m3video] ERROR: XDM_UNSUPPORTEDPARAM = 14,

这个问题困扰很久了,一直找不到方法解决,希望论坛里的高手能指明一个方向,万分感谢!!

  • 你好,

    你这个chain设计的相当复杂,能否有简化的可能?

    编码报错是参数不支持,你把输入编码器的图像的分辨率,和编码参数打出来看看,会不是是最大分辨率不对?或者是其他参数不对?

  • 谢谢回答!现在我做了一个实验,我把所有的应用都屏蔽掉,只开启link的初始化跟start,也会出现这种情况,当出现 ENCLINK:ERROR in Enclink_h264EncodeFrameBatch.Status[-1] for IVAHD_0这个的时候过一下系统就崩溃了。还没执行到编码参数的打印处。我不知道是不是dup出来的数据直接到merge中间是否会存在数据的问题?

  • 你的chain设计确实有点复杂,这样的问题你自己调试,找问题更合适一点点。

    1、跟一下这个错误  51398:!ERROR!:ENCLINK::links_m3video/iva_enc/encLink_h264.c:[407]::INTERNAL ERROR:-1

    2、你在enc link 前面有一个select ,现在你不管是选择那一路通道都会有问题是吗?

    3、可以把你chain的代码可以提取一下,发一个附件看一下。

  • 在enc之前的select选在我从dup4出来的4个通道中的任意一个都不会有问题(0,1,2,3),只要我的select2中间有涉及到dup3过来的三个通道(4,5,6)就会出现上面的错误,但是图像是能够显示出来,只是跑一会就会出现崩溃现象。

    下面是我在select2处筛选出来的通道:

    pSelectPrm2 = &(pstruct->selectLink[2].create_params);
    pSelectPrm2->inQueParams.prevLinkId = pstruct->mergeLink[5].link_id;
    pSelectPrm2->inQueParams.prevLinkQueId = 0;
    pSelectPrm2->numOutQue = 1;
    pSelectPrm2->outQueParams[0].nextLink = pstruct->ipc_outvpss_Link.link_id;

    下面这种设置不会报错,并且显示也正常(视频是合成流)
    pSelectPrm2->outQueChInfo[0].numOutCh = 4;//3;//6;
    pSelectPrm2->outQueChInfo[0].inChNum[0] = 3;//sigal stream 0------high
    pSelectPrm2->outQueChInfo[0].inChNum[1] = 1;//muti stream 1------low
    pSelectPrm2->outQueChInfo[0].inChNum[2] = 2;//muti stream 2-------jpeg
    pSelectPrm2->outQueChInfo[0].inChNum[3] = 0;//muti stream 0
    // pSelectPrm2->outQueChInfo[0].inChNum[4] = 1;//muti stream 1
    // pSelectPrm2->outQueChInfo[0].inChNum[5] = 2;////muti stream 2

    但是下面这种设置就会出现问题

    pSelectPrm2->outQueChInfo[0].numOutCh = 4;//3;//6;

    ----->这里的que0中间只要有通道赋值为4,5,6就会出现编码器错误(0通道是单路视频流)
    pSelectPrm2->outQueChInfo[0].inChNum[0] = 4;//sigal stream 0------high
    pSelectPrm2->outQueChInfo[0].inChNum[1] = 1;//muti stream 1------low
    pSelectPrm2->outQueChInfo[0].inChNum[2] = 2;//muti stream 2-------jpeg
    pSelectPrm2->outQueChInfo[0].inChNum[3] = 0;//muti stream 0
    // pSelectPrm2->outQueChInfo[0].inChNum[4] = 1;//muti stream 1
    // pSelectPrm2->outQueChInfo[0].inChNum[5] = 2;////muti stream 2

    这套link逻辑我是在我们公司现有产品的流程逻辑上修改的,改动的地方也很少。

  • 你做一个这样的测试吧,把dup3只出来一路数据给merge5 , 再通过select 编码;

    dup3出来的另外一路正常的数据先断开;

    如果你dup3出来的数据格式有问题,编码肯定会有问题的。

    你是用的什么版本的sdk ?你不说没有法帮你查问题啊

  • 我修改link逻辑为下图:

    我在获取H264编码时发现阻塞在OSA_queGet 这个函数,没有出现编码器的错误。我选的参数为阻塞(OSA_TIMEOUT_FOREVER),假如设置为非阻塞的话就会出现段错误。

    SDK的版本为DVRRDK_02_80_00_10。谢谢!!

  • 问题已经解决,由于MCFW底层代码修改,导致ENC编码出错,更新底层代码之后OK.流程逻辑没有问题。