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.

[参考译文] 无法从视频编码器读取帧(enc_read_frame)

Guru**** 2609285 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/583863/unable-to-read-frame-from-video-encoder-enc_read_frame

您好!

我使用的是在 QNX 中运行的 J6 EVM (REV H)。

我正在尝试将 YUV 文件编码为 H.264文件。

编码器库初始化、编码实例创建成功。

启动编码器后、当我尝试使用"enc_read_frame"读取帧时、我无法读取任何帧。

我已附上我的源代码供您参考。

e2e.ti.com/.../enc_5F00_test.c

请告诉我、我设置的输入参数是否正常。

调试视频编码器的源代码时,从 enc_read_frame 函数中的"get_list_head"读取时失败(文件:bsp-TI-DRA74x-OMAP5-SDP6.6\bsp-TI-DRA74x-OMAP5-SDP6.6\src\utils\videolib\videnc\dc_enc)

请采取必要措施解决此问题。

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

    我已将您的问题转发给 QNX 视频专家。

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

    我从 QNX 网站上提取了最新的 QNX BSP "bsp_ti-j6-dra74x_vayu-evm_br-660_be-660_SVN817036_JBN156.zip"、但看不到 bsp\src\utils\videolib\videnc\dc_ence.c
    它是附加包吗? 我无法访问 BSP-TI-DRA74x-OMAP5-SDP6.6\BSP-TI-DRA74x-OMAP5-SDP6.6\src\utils\videolib\videnc\dc_enc.c 因此,我无法真正看到 enc_read_frame()。
    为什么您可以参考我们的测试代码"dc_enc_test.c"来了解 enc_read_frame()为何不起作用?

    您可以从 git.omapzoom.org 查看我们的 QNX 测试代码
    我认为 enc_read_frame()的类似引用应该是 read_input()

    在 enc_test.c 中、您尝试编码720p 分辨率。 获得 DCE_ENC_TEST 二进制文件后、您可以运行:
    DCE_ENC_TEST 1280 720 0 H264高51非倾斜式已满

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

    H Buddy、

    当我运行 dc_enc_test.c (我的项目中的 enc_test.c)时、我将获得以下输出。

    实际上、我在 alloc shmem 缓冲区中遇到错误。

    我已经在 stratup.sh 中运行"shmemallocator"。  我还需要添加其他库吗?

     /enc_test 1280 720 0 sfish_p1280x720_30fps_420p_60fr_nv12_720p.yUV 输出。h264 h264高51非平铺位已满
    所选编解码器:H264
    所选缓冲器:非平铺器
    编码模式:全
    可接受的 H.264级别值= 51
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:851:   主   调试:width=1280、height=720
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:868:   主   调试:对齐宽度= 1280、高度= 720、num_pbuffers=2后
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:880:   主   调试:ENGINE_OPEN 成功发动机= 8010a510
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:941:   主   调试:DCE_alloc VIDENC2_Params successful params=80aa020 inputDataMode (2=IVIDEO_NUMROWS) 3.
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:945:   主   调试:带有 profile_value 100 Level 51的 H.264编码
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1108:  主   调试:DCE_alloc VIDENC2_Params successful h264enc_params=80aa020
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1188:  主   调试:VIDENC2_create successful codec=8010a550
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1197:  主   调试:DCE_alloc dynParams Successful dynParams=80ab020 size=240
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1247:  主   调试:DC_alloc IH264ENC_DynamicParams 成功大小240 dynParams=80ab020
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1335:  主   调试:DC_alloc IH264ENC_Status Successful status=80ad020
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1342:  主   调试:IH264ENC_Status Successful h264enc_status=80ad020
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1344:  主   调试:VIDENC2_CONTROL IH264ENC_Status XDM_getversion h264enc_status->data.buf = H264ENC_TI DEV.H264AVC .EIVAHD.02.00.08.01
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1348:  主   调试:DC_alloc IH264ENC_Status Successful h264enc_status=80ad020
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1396:  主   调试:VIDENC2_CONTROL XDM_SETPARAMS 成功
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1407:  主   调试:VIDENC2_CONTROL - XDM_GETBUFINFO 错误0状态编号 InBuf 2 minInBufSize[0] 1280 minInBufSize[1] 1280
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1413:  主   调试:输入缓冲区配置宽度1280高度720
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1416:  主   调试:输入 inBufs 0x80ac020通过 DC_alloc 分配
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1446:  主   调试:通过非平铺器分配输入
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:338:   Input_Allocate_nonTiler 调试: --- 创建非输入平铺位器 buf 0x809b050 -------------------------------------------------------
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:216:   Allocate_nonTiler      调试: --- 创建非 TILER 大小1382400 -------------------------------------------------------
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:230:   Allocate_nonTeiler      debug:nonTILER shmBuf->vir_addr =28000000、shmBuf->phy_addr =ba300000
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:243:   Allocate_nonTiler      debug:shmBuf 809b068
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:352:   input_allocate_nonTiler debug:input non tiler buf=809b050、buf->buf=28000000 y=28000000、uV=280e1000
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:338:   Input_Allocate_nonTiler 调试: --- 创建非输入平铺位器 buf 0x809b088 -------------------------------------------------------
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:216:   Allocate_nonTiler      调试: --- 创建非 TILER 大小1382400 -------------------------------------------------------
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:225:   allocate_nonTeiler      错误:无法分配 shmem 缓冲区

    D:/QNX_workspace/Navigation/enc_test/enc_test.c:342:   input_allocate_nonTiler 错误:DCE_ence_test_FAIL:非平铺位分配失败
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1460:  主   调试:输入缓冲区配置 num_buffers 2宽度1280高度720
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1480:  主   调试:通过非平铺器分配输出
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:216:   Allocate_nonTiler      调试: --- 创建非 TILER 大小1382400 -------------------------------------------------------
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:225:   allocate_nonTeiler      错误:无法分配 shmem 缓冲区

    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1483:  主要   错误:DCE_ence_test_FAIL:非平铺机分配失败-12

    正在删除编码器编解码器0x8010a550...

    正在释放输出0... output_mvbuf 0...

    正在释放输入...
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:258:   input_free     debug:input_free:809b050
    DCE ENC 测试已完成...

    此致、

    加里加兰语

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

    尝试分配另一个第2个输入缓冲器时、您获得-12 (ENOMEM)是很奇怪的。
    从跟踪中、通过内存分配器分配了几个缓冲区:
    * VIDENC2_Params -使用 DCE_ALLOoc 分配、默认情况下使用 MEM_SHARED (内存分配器)
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:941:主调试:DCE_alloc VIDENC2_Params successful params=80aa020 inputDataMode (2=IVIDEO_NUMROWS) 3.

    * IH264ENC_DynamicParams -通过 DC_alloc
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1247:主调试:DC_alloc IH264ENC_DynamicParams 成功大小240 dynParams=80ab020

    * IH264ENC_Status -通过 DCE_alloc
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:1348:主调试:DC_alloc IH264ENC_Status Successful h264enc_status=80ad020

    *第1个输入缓冲器:
    D:/QNX_workspace/Navigation/enc_test/enc_test.c:243:Allocate_nonTiler 调试:shmBuf 809b068

    能否运行:使用-i shmemallocator
    J6EVM@QNX #使用-i 内存分配器
    QNX_BUILDID=(GNU) f5445ea52b890ba5f05dd8858db52a8b
    name=shmemallocator
    Description=共享内存分配器驱动程序
    日期= 2017/03/22-10:16:44-CDT
    STATE =实验
    host=magpie
    USER=a0389345

    以查看它是哪个版本的内存分配器。 您正在构建内存分配器吗?
    您是否有权访问 TI QNX DCE 4.x 版(仅限 TI NDA)?

    至于其他二进制文件或库、需要关注的组件应为:
    内存分配器
    IPC
    libdce
    M4固件(ipumm)

    您是否还可以更改 QNX BSP 启动生成:QNX_BSP\src\hardware\startup\boards\dra74x\vayu-EVM\build
    发件人:
    startup-dra74x-vayu-evm -v -n852,668 -W -G
    至:
    startup-dra74x-vayu-evm -v -n852668 -W -G -r0xBA3000000x5A00000.1 -r0x600000000x20000000.1

    这是为了为内存分配器(0xBA300000 - 0xBFD00000)分配90MB 的内存

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

    您好、Buddy、

    添加库"libsharedmemallocator.a"后、我错过了在我的项目中包含库"libsharedmemallocator.a"。

    工作正常。 非常感谢您的支持。