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.

DM8127 中的mctnf的开启与关闭

您好!

我在编译DM8127   mcfw的时候,把mctnf功能给打开了,在低照下对噪声具有较好的抑制效果,但在光照条件较好的情况下,会影响清晰度,就算把所有的相关参数设置到最低,依然会影响清晰度。有没有什么好的方法手动的开启与关闭MCTNF功能(也就是白天关闭,等到晚上照度值低的时候开启)呢?

  • 你好,

    请尝试配置minWtForCurQ8=255来关闭MCTNF。

    请注意MctnfLink_drvUpdateDCC(&pMctnfParam);可能会更新minWtForCurQ8参数,请确保你调用control命令配置参数时候配置了正确的值。

  • 非常感谢您的回答

    把minWtForCurQ8的值设为255后,MCTNF  对噪点不进行处理或处理很小,不过我发现打开MCTNF  Link 过后VNF中的TNF和SNF就失去原来的着用了,也就是说VNF的降噪效果变得非常弱,几乎不起作用。是不是MCTNF和VNF两者是互斥的?如果不是互斥的那么我该怎么配置,才能使二者的降噪发挥到最佳的效果呢? 我在Makefile的一个配置文件里面看到IPNC_RDK_CFLAGS += -DVNF_BEFORE_MCTNF的标志,我启用了它,但图像会出现问题

    而且VNF的降噪效果相对没有开启MCTNF的效果依然很弱。

  • 你好,

    请问你使用的是IPNC RDK3.8么?如果是,在full feature demo里面MCTNF和VNF的使用是互斥的。MCTNF是时域降噪和其配合使用的空域降噪就是VNF里面的SNF(NSF2)。所以你说VNF里面的SNF效果很弱觉得不太可能。

    我建议MCTNF和VNF的时域二选一,不需要两个都使用的。

    IPNC_RDK_CFLAGS += -DVNF_BEFORE_MCTNF表示是先运行MCTNF(时域降噪)还是VNF里面的NSF2(空域降噪)。请问你出问题的代码对原始的代码做了改动么?如果有,返回默认代码是否有类似问题?

     

  • 您好。我现在碰到的问题类似,同时开启了mctnf和vnf,DVNF_BEFORE_MCTNF没有开启。

    现在我在切换分辨率的时候,1080P下ie画面正常,但别的分辨率比如720p会花屏,请问有可能是什么问题?

    切换分辨率是给cameraLink发送CAMERA_LINK_CMD_CHANGE_RESOLUTION。

    rdk版本v3.8

    调了好几天了,麻烦您能提供一个思路吗,十分感谢

  • 你好,

    如果不添加MCTNF就不会出现花屏么?如果是只是VNF切换分辨率会花屏么?

    建议你打印一下MCTNF的参数,看里面的长宽,pitch等是否正常?

  • 首先感谢您的回复。

    我的调试过程如下
    1、关闭mctnf,切换分辨率,一切正常。开启后,故障复现。
    2、怀疑到可能是从mctnf出来传递到vnf的frameinfo有错。
       查看关闭mctnf后默认发送到vnf的frameinfo,主要关注了其width,height,pitch。
       之后开启mctnf,再次查看相应的值,发现与前者有不同的地方。
       对mctnf代码进行修改,使开启mctnf传出的frameinfo的值符合关闭时情况,但是修改完测试后还是会花屏。
     
    所以不知道在做mctnf时候是否需要对帧有一些特殊的处理?传进vnf是不是也需要一些注意事项?
  • 你好,

    请问你关闭MCTNF的时候,VNF里面的NSF2是否有使能?VNF里面的NSF2是需要对图像做padding的。

  • 是关闭的。

    我又尝试了楼上说到的,DVNF_BEFORE_MCTNF开启之后编了一下,现象和他贴出的图是一样的。上边有一个花边。不过切换分辨率倒是不花屏了。= _ =!

  • Ricky,

    是buffer偏移的问题。我做了一下下面的小测试,把输入MCTNF的buffer向下偏移量32行,就没有上面的花屏了。下面的测试仅限于非tiler,1920x1080的场景。

    MCTNF_ProcessFrame()

        /*------------------------------------------------------------------------*/
        /* Assign memory pointers adn sizes for the all the input buffers         */
        /*------------------------------------------------------------------------*/
        for(i = 0; i < MctnfChObj->gInputBufDesc.numPlanes; i++)
        {
           MctnfChObj->gInputBufDesc.planeDesc[i].bufSize.bytes  = (XDAS_Int32)bufSize[i];
        if(MctnfChObj->chCreateArgs.tilerEn)
           MctnfChObj->gInputBufDesc.planeDesc[i].buf = (XDAS_Int8 *) Utils_tilerAddr2CpuAddr((UInt32)currentImageBuffer->addr[1][i]);
        else
           MctnfChObj->gInputBufDesc.planeDesc[i].buf = currentImageBuffer->addr[1][i];

        MctnfChObj->gOutputBufDesc.planeDesc[i].memType = MctnfChObj->chCreateArgs.tilerEn ? XDM_MEMTYPE_TILED16 : XDM_MEMTYPE_RAW;
     }

     //add by chris for test non-tiler mode/1080p
     MctnfChObj->gInputBufDesc.planeDesc[0].buf = (unsigned char *) ((unsigned int) currentImageBuffer->addr[1][0]+32*1920);
     MctnfChObj->gInputBufDesc.planeDesc[1].buf = (unsigned char *) ((unsigned int) currentImageBuffer->addr[1][1]+32*1920/2);

  •    对于您所说IPNC RDK3.8里面的MCTNF和VNF的时域降噪是互斥的,我有点不明白,它们之间那些参数的配置使得它们互斥了呢?如果我想两者都使用,我该如何设置?(我现在是打开了MCTNF降噪,vnf里的时域降噪不论开启与关闭都没有影响,vnf的空域降噪有一定的效果,感觉达不到我想要的降噪效果)
  • 我的理解是这两种滤波器至少部分复用了硬件模块,以及会导致内存占用导致的性能降低。所以不要同时打开使用。

    譬如同一种类型的滤波,你过一次滤波器,和过两次差不多的滤波器,恐怕效果就不如预期了。