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.

DM38X中,怎么实现编码端slice分片输入和输出呢?

采用DM38X的芯片,编码器已经可以将一帧图像分成多个slice进行编码,但是RDK中好像仅支持HDVPSS整帧的输入,以及编码后整帧的输出,在enclink_h264.c文件中修改以下参数:
staticParams->videnc2Params.inputDataMode = IVIDEO_SLICEMODE;
staticParams->videnc2Params.outputDataMode = IVIDEO_SLICEMODE;
staticParams->videnc2Params.numOutputDataUnits = 1;

得到的结果仍然是整帧的输入输出。

请问怎么能够使图像的输入输出和编码器一样以slice为单位进行处理呢?

  • 你好,

    IPNC RDK里面并没有现成的代码支持你需要的应用。你需要添加相关代码。

    请问你的视频输入是从VIP采集的还是ISS采集的?
  • 你好,我的视频输入是从VIP进行采集的,利用RDK里面的capturelink输入的。
  • 你好,

    如果是非复用模式下采集,可以设置N个line后产生一个中断,把N个line作为一个slice进行编码。

    e2e.ti.com/.../268690
    What is capture / VIP requirements. If you planning to capture non-multiplexed capture, it possible to generate an interrupt after receiving N lines of video.
    You would require to use X line interrupt control descriptor.
  • N可以实时变吗?比如1080P,垂直方向的宏块是分数个,需要补齐行,也就是说最后一组slice的行数小于之前slice的行数
    另外编码后输出的话是否是按slice来编码就直接slice输出?这样的话就不需要额外的配置了?
    谢谢!
  • 你好,

    不需要实时变的,最后一个slice利用frame结束中断来获得。

    e2e.ti.com/.../268690
    This requires to be done as part of start of capture start up sequence. Also, you might want to use an EOF (End Of Frame) interrupt as well. This would give you better control for sub-frame capture to handle boundary conditions.

    e2e.ti.com/.../601013
    There is an feature of slice based capture in VIP driver, i guess it was added in DVR-RDK4.0 and later releases.

    Essentially, it given callback after every n lines are captured along with the frame. This frame can be used as read only frame and once the complete frame is captured, it can dequeued.

    You could go through VIP driver's header file to get idea about this feature.

  • 1.关于slice输入,我现在的理解是图像输入后,设置一个N行中断来指示每个slice输入完成,同时利用每一帧的EOF中断来界定每一帧的边界,其中slice输入现在RDK3.9.1的HDVPSS驱动里面还不支持,只支持每一帧完成后的中断;slice输入的中断需要自己修改driver或者更新到最新的driver,这个driver现在在TI网站上找不到,必须要联系FAE才能获得吗?
    2.当图像以slice为单位进行编码后,能否以slice为单位输出?就是每编码完成一个slice就直接调用link配置里面的cbFxn,而不是整帧编码完成后才调用。我修改了以下参数,但是仍然是以整帧为单位输出,这个还需要修改哪些参数呢?
    staticParams->videnc2Params.outputDataMode = IVIDEO_SLICEMODE;
    staticParams->videnc2Params.numOutputDataUnits = 1;


    非常谢谢!
  • 你好,

    Chong Zhou 说:
    其中slice输入现在RDK3.9.1的HDVPSS驱动里面还不支持,

    你能否到英文的e2e网站上确认一下IPNC RDK3.9.1是否支持VIP的line interrupt模式?

    Chong Zhou 说:
    2.当图像以slice为单位进行编码后,能否以slice为单位输出?就是每编码完成一个slice就直接调用link配置里面的cbFxn,而不是整帧编码完成后才调用。我修改了以下参数,但是仍然是以整帧为单位输出,这个还需要修改哪些参数呢?

     sliceCodingParams相关参数你设定了么?e2e论坛上有不少相关帖子,你可以参考一下,例如:e2e.ti.com/.../365435

  • 你好!

    Chris Meng 说:
    你能否到英文的e2e网站上确认一下IPNC RDK3.9.1是否支持VIP的line interrupt模式?

    https://e2e.ti.com/support/processors/f/791/t/365435

    There is an feature of slice based capture in VIP driver, i guess it was added in DVR-RDK4.0 and later releases.

    估计要到下一版4.0才能支持,我先试着自己按你说的思路往底层改一下

    Chris Meng 说:
     sliceCodingParams相关参数你设定了么?e2e论坛上有不少相关帖子,你可以参考一下,例如:e2e.ti.com/.../365435

    这些参数我都修改了:

        staticParams->videnc2Params.rateControlPreset = IVIDEO_LOW_DELAY;
        staticParams->entropyCodingMode = IH264_ENTROPYCODING_CAVLC;
        staticParams->videnc2Params.inputDataMode = IVIDEO_ENTIREFRAME;
        staticParams->videnc2Params.numInputDataUnits = 1;
        staticParams->videnc2Params.outputDataMode = IVIDEO_SLICEMODE;
        staticParams->videnc2Params.numOutputDataUnits = 1;

        staticParams->sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_USERDEFINED;
        staticParams->sliceCodingParams.sliceMode = IH264_SLICEMODE_MBUNIT;
        staticParams->sliceCodingParams.streamFormat = IH264_BYTE_STREAM;
        staticParams->sliceCodingParams.sliceUnitSize = 2040;

        dynamicParams->videnc2DynamicParams.putDataFxn = (XDM_DataSyncPutFxn)DataSyncPutDataFxn;
        dynamicParams->videnc2DynamicParams.putDataHandle = DataSyncPutDataHandle;
        dynamicParams->videnc2DynamicParams.getDataFxn = (XDM_DataSyncGetFxn)DataSyncGetDataFxn;
        dynamicParams->videnc2DynamicParams.getDataHandle = DataSyncGetDataHandle;

        dynamicParams->sliceCodingParams.sliceCodingPreset = IH264_SLICECODING_USERDEFINED;
        dynamicParams->sliceCodingParams.sliceMode = IH264_SLICEMODE_MBUNIT;
        dynamicParams->sliceCodingParams.streamFormat = IH264_BYTE_STREAM;
        dynamicParams->sliceCodingParams.sliceUnitSize = 2040;

    我现在DataSyncPutDataFxn和DataSyncGetDataFxn这两个函数都没有做任何操作。我现在的理解是需要在DataSyncPutDataFxn这个函数中完成slice输出这个功能?

    谢谢!

  • Chong Zhou 说:
    DVR-RDK4.0

    DVR RDK4.0早就有了,你使用的是IPNC RDK3.9.1不是一个应用的RDK。

    Chong Zhou 说:
    staticParams->sliceCodingParams.sliceMode = IH264_SLICEMODE_MBUNIT;

    我理解编码的proces call在处理完你设定的slice大小后,就会返回,表示这个slice编码结束,请问你是否有观察到?

  • Chris Meng 说:
    DVR RDK4.0早就有了,你使用的是IPNC RDK3.9.1不是一个应用的RDK

    请问slice输入输出这部分,这个DVR RDK和IPNC RDK是可以通用吗?如果可以,这个在哪里下载呢?还是需要从TI技术支持那里获取?我在网站上没有找到

    Chris Meng 说:
    我理解编码的proces call在处理完你设定的slice大小后,就会返回,表示这个slice编码结束,请问你是否有观察到?

    对的,我在dynamicParams->videnc2DynamicParams.putDataFxn函数中看到每个slice编码完成后都会调用这个回调函数,这个在VIDEO-M3上是对的,但是在A8上我设置的ipcBitsInHostPrm0.cbFxn这个回调函数中,还是只有每一帧才调用一次,我这个link的顺序是enc->ipcBitOutVideo->ipcBitInHost,我的理解是ipcBitOutVideo每一个帧才通知一次ipcBitInHost,而enc编完一帧后才通知ipcBitOutVideo,所以是否就是需要在dynamicParams->videnc2DynamicParams.putDataFxn这个函数中添加什么样的设置来使得后续的操作都以slice为单位来工作而不是以帧为单位?

    谢谢!