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.

[参考译文] TDA2XEVM:是否可以从 TIDL postproc ALG 链接将元数据缓冲区转储到文件?

Guru**** 2618835 points
请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/662510/tda2xevm-dumping-metadata-buffer-to-file-from-tidl-postproc-alg-link-possible

您好!

我正在实验 BIOS 上的语义分割用例。

我想将元数据缓冲区输入转储到 ALG 链接"arg_tidlpostproc (A15)"

下面是  tidlpostprocLink_algPlugin.c 中 AlgorithmLink_tidlpostProcess ()函数中的代码片段(粗体),我在其中尝试这样做:

/*跳过输入填充*/
inAddr +=\
(pAlgObj->inWidth * pLinkCreatePrms->inPad)+\
pLinkCreatePrms->inPad;

/*色表查找*/
if ((system_DF_YUV420SP_UV =pLinkCreatePrms->outDataFormat)||
(SYSTEM_DF_YUV420SP_VU =pLinkCreatePrms->outDataFormat))
{
//转储元数据缓冲区
int32 metaFp = ChainCommon_OSAL_FileOpen ("metadatema.bin"、CHAINSCOMMON_OSAL_FILEMODE_WRITE_BIN);
ChainCommon_OSAL_FileWrite (metaFp、inAddr、pAlgObj->inWidth*pAlgObj->inHeight);
ChainCommon_OSAL_FileClose (metaFp); 
//对于 YUV 格式,我们只转储 UV 平面*/
for (HT = 0;HT <(pLinkCreatePrms->outHeight/2);HT++)
{
(wd = 0;wd < pLinkCreatePrms->outWidth;wd += 2)
{
inData =*(((uint8*) inAddr + wd);
*((uint16*) outAddr565++)= pLinkCreatePrms->colPalette565[inData];
}

inAddr +=(2 * pAlgObj->inWidth);
} 

当我运行用例时、当我尝试打开文件进行写入时、我收到以下错误:

文件:错误:无法打开文件!!!

是否支持在 A15上写入文件(对于 BIOS)? 如果是、是否有办法做到这一点?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    请参阅以下相关主题

    e2e.ti.com/.../661045

    此致、

    Kumar.D

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好、Kumar、

    我遵循了该线程的指令。 事实上,我是该线程的 OP :-)

    但是、我无法打开文件进行写入。

    我在另一个线程中尝试执行的操作的一个不同之处在于、我尝试在 A15上写入、在前一个示例中、它在 IPU 上写入。

    FATFS API 对它们在哪些硬件平台上受支持有限制吗?

    谢谢、
    Bhargav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bhargav、您好!

    您能否分享您的用例链?

    此外、当您要将文件输入馈送到算法 插件时、您可以使用空源链接、该链接支持从文件读取。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    如前所述、我使用的是 semSeg usecase (已经是 SDK 的一部分)。

    我对代码所做的唯一更改是在 tidlpostprocLink_algPlugin.c 中添加文件写入逻辑、如我的第一个帖子中所述。

    我不想向算法插件提供源、只需将元数据输入转储到它、即检测到的每像素类缓冲区。

    谢谢、
    Bhargav
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bhargav、

    您能否添加更多打印件并检查3个文件调用中的哪一个出现了错误?
    我们已将"无法打开文件"添加到所有3个函数中、因此不确定您在打开、写入或关闭时是否遇到错误。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    我在写入文件时收到错误、即在 ChainCommon_OSAL_FileWrite()调用中。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bhargav、您好!

    您应该检查文件是否已正确打开。 是否可以添加 NULL 元值 Fp 的检查?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    文件已打开。 metaFp 不为 NULL。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bhargav、

    在文件写入函数中、metafp 不正确。 我正在复制写入 API 代码片段、正如您所看到的、它失败了、因为 metafp 不正确。
    hndlFile = File_open (filename、"WB");

    if (hndlFile < 0)

    RetVal = SYSTEM_LINK_STATUS_EFAIL;
    vps_printf ("文件:错误:无法打开文件!!! \n");


    1.使 metafp 成为全局变量
    2、具有如下所示的代码
    fp = ChainCommon_OSAL_FileOpen (文件名、\
    CHAINSCOMMON_OSAL_FILEMODE_WRITE_BIN);
    utils_assert (-1!= fp);

    vps_printf ("SRV_CALIB_uC:将 YUV 图像%d 写入文件%s...\n"\
    CNT、文件名);

    ChainCommon_OSAL_FileWrite (
    FP、
    (uint8*) ChainCommon_OSAL_getVirtAddr (
    (uint32) pObj->calibrationPrm.calMatGenPrm3DSrv.inImgPtr[cnt])、
    pObj->imgSize);

    ChainCommon_OSAL_FileClose (FP);
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!
    实际上,使用断言检查 utils_assert (-1!= metaFp)时,我会遇到故障,即文件打开本身失败。

    我已检查 SD 卡中是否有足够的空间。 在这种情况下、为什么要将文件打开?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    *失败
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bhargav、

    不知道为什么失败。 如果您有调试器、您可以单步执行它。
    在尝试将 ChainCommon_OSAL_FileOpen 直接替换为 fp = fopen (mmcsdFileName、"WB")之前;

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    不幸的是、我现在没有调试器、因此无法这样做。

    我在 BIOS 上,而不是在 Linux 上,所以函数不应该是 File_open(),而不应该是 fopen()?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bhargav、

    请使用 File_open。 很抱歉错过了这个机会。
    file_open (filename、"WB");
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    看起来像正在调用 File_open()的虚拟版本! 您能告诉我如何启用正确的版本吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    看起来我们只能有一个 FATFS_PROC_TO_USE。 由于 IPU 是针对 semSeg 使用案例进行读/写操作、是否还有方法也对 FATFS 使用 A15?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    Bhargav、

    否、FATFS 仅在 IPU1_0上受支持。 您可以从任何其他内核使用它。
    您需要从 A15向 IPU1_0发送消息以进行文件读取/写入。 幸运的是、我们有类似的应用来实现这一点。 请参阅 apps\src\rtos\modules\network_Ctrl\network_Ctrl_handle_mmc_wrproxy.c

    您需要从用例执行类似的初始化、并使用系统链接从 A15向 IPU 发送消息以读取/写入文件

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    感谢您提供信息 Prasad。

    我是否需要更新我的用例链接和链接(在 chains_semSeg.txt 中)以添加一些链接,或者我是否可以使用 System_linkControl()发送消息?
    在接收端、我如何处理这种情况?

    很抱歉、如果这些是非常基本的问题、但我对链接和链接非常陌生。 某种教程也会有所帮助。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bhargav、

    取决于您的意图是什么。
    如果您只想写入文件以测试/验证某些内容、则可以直接使用系统链接调用。 但是、如果您希望将其保留为用例的一部分、则可以改用 NULL 链接。 您的用例流程如下所示

    捕获/空 src ->算法->DUP
    DUP->NULL
    dup->further 处理。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    我的目的是测试某些内容、因此我想我将直接使用系统链接调用、就像在 network_ctrl_handle_mmc_wr proxy.c 中一样

    只是想知道如何在接收端、即在 IPU 上处理这个问题
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Bhargav、

    如果尚未启用网络、则需要调用"SystemLink_registerHandler (fileIOCmdHandler);"以使用系统链接注册文件处理程序。
    您可以将其添加到用例主文件中。
    有关更多详细信息、请参阅以下内容
    vision_sdk\apps\src\rtos\modules\network_ctrl\network_ctrl_handle_mmc_wr
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad、您好!

    我能够使用此方案成功转储元数据缓冲区。 衷心感谢您为帮助我所做的努力!

    但是,我想为每个帧和每10个帧转储一次,File_open()调用失败。 我发现这是因为 Links_FW/src/rtos/utils_common/src/file_api_priv.h 中的 utils_file_MAX 设置为10。

    我可以简单地增加这个数字(比如100或500)吗? 或者这是硬性限制吗?
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    不确定最大数量、但应关闭并打开相同的文件。 如果您这样做、我认为 utils_file_MAX 无关紧要。
    使用 File_Close 关闭文件、而不是使用 osal_closse 关闭文件、文件写入也是如此。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prasad 的好地方 但我想为每个帧预测类转储单独的文件。

    我将尝试增加该数字并查看其变化情况。 即使我可以转储~100帧、这也会很好。