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.

[参考译文] TMS320DM368:H.264字节流的代码转换、之前由 DM365 H.264编码器2.30.0.6使用 DVSDK 4.2.0.6 (DM368)中的 DM365 H.264解码器进行编码

Guru**** 2551110 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/617119/tms320dm368-transcoding-an-h-264-byte-stream-previous-encoded-by-dm365-h-264-encoder-2-30-0-6-with-dm365-h-264-decoder-from-the-dvsdk-4-2-0-6-dm368

器件型号:TMS320DM368

您好!

我正在尝试解码之前由官方编码器编码的 H.264字节流、以便使用不同的比特率对其重新编码。 实际上、我尝试重新编码来自不同编码器的流、但由于它不起作用、我尝试使用我们一直使用的同一本机 H.264编码器、只是检查解码器是否正常工作以及我是否知道如何使用它。

不幸的是,这对我来说是不起作用的。 解码器初始化正常、并且在不长的时间后、它会正确识别视频分辨率。 它还会发送一些图像、然后我使用相同的参数直接将这些图像馈送到编码器、只是不同的比特率。 但是、图像无法识别。 在此阶段、我可能会假设存在一些缓冲器不匹配、可能是 Y 和 UV、宽度和间距未正确传递。 但问题出现在日志中、在日志 中、对 VIDDEC2_PROCESS 的几乎每次调用都以返回代码-1结束、并从状态中获得一些扩展错误。 常见错误为0x200 (应用隐藏)、0x600 (+数据不足)等 消耗的字节数有时仅与长度相关、有时甚至更多、有时更少。

HD 解码导致 VIDDEC2_Process 崩溃、因此我目前只尝试 VGA。

视频解码器使用以下参数进行初始化:

IVIDDEC2_Params _vdpParams = m_hvdpParams.viddecParams;
vdpParams.size = sizeof ( m_hvdpParams );
vdpParams.maxHeight = MAX_HEIGHT;
vdpParams.maxWidth = MAX_WIDTH;
vdpParams.maxFrameRate = MAX_FRATE * 1000;
vdpParams.maxBitRate = MAX_bitrate;
vdpParams.dataEndeals= XDM_BYTE;
vdpParams.forceChromaFormat = XDM_YUV_420SP;
m_hvdpParams.displayDelay = 0;
m_hvdpParams.hdvicpHandle = NULL;
m_hvdpParams.disableHDVICPeveryFrame = 0;
m_hvdpParams.levelLimit= level_4_2;
m_hvdpParams.frame_closedloop_flag = 0;
m_hvdpParams.inputDataMode = IH264VDEC_TI_ENTIREFRAME;
m_hvdpParams.sliceFormat = IH264VDEC_TI_BYTESTREAM;

IVIDDEC2_DynamicParams &vddpDynamicParams = m_hvddDynamicParams.viddecDynamicParams;
vddpDynamicParams.size = sizeof (m_hvddDynamicParams);
vddpDynamicParams.decodeHeader = XDM_DECODE_AU;
vddpDynamicParams.displayWidth = 0;
vddpDynamicParams.frameSkipMode = IVIDEO_NO_SKIP;
vddpDynamicParams.frameOrder = IVIDDEC2_DISPLAY_ORDER;
vddpDynamicParams.newFrameFlag = XDAS_false;
vddpDynamicParams.mbDataFlag = XDAS_false;
m_hvddDynamicParams.getDataFxn =空;
m_hvddDynamicParams.dataSyncHandle =空;
m_hvddDynamicParams.resetHDVICPeveryFrame = 1;

m_hVideoDecoder = VIDDEC2_create (m_hEngine、"h264dec、&vdpParams);

我曾尝试自己解析 NAL 单元并单独给它们馈送。

我还尝试给它一个内部有任何 NAL 单元的缓冲区、并尝试根据占用的字节数进行处理。

能不能告诉我我有什么问题、或者使用 H.264解码器的正确方法是什么?

谢谢、

Gadi

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

    您好、Gadi、

    [引用 user="Gadi Bergman">解码器初始化正常,但不长的时间后,解码器会正确识别视频分辨率。 它还会发送一些图像、然后我使用相同的参数直接将这些图像馈送到编码器、只是不同的比特率。 但是、图像无法识别[/quot]

    您能否通过在直接馈送到编码器之前转储解码器输出进行检查。 由于解码器抛出的数据不足错误, 流可能已损坏。此解码器转储可能会为您提供一些线索。 您还可以使用本实验包中的示例测试应用@(DM365_h264dec 02_00_13_product/DM365_h264dec 02_00_13_product/packages/ti/sdo/codec/h264dec /apps/client/)。

    您是否尝试新编码流而不是使用现有流?

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

    感谢您的建议。 问题是、我没有或不知道可以获取解码器输出并显示它的工具、而不是用于将其传递到我们系统的编码器(YUV420SP/NV12)。 我知道编码器工作良好。 与 PC 上的 FFMPEG 解码器配合使用时、H.264视频流看起来不错、但我无法在 DM368上使用 FFMPEG 解码器、因为它不够快(已尝试过)。 我的担忧如下:

    1.也许我不完全理解如何将字节流馈入解码器。 我是否应该解析 NAL 单元并将其作为同一调用中的单独输入缓冲器? 我是否应该一次将一个 NAL 单元作为单个输入缓冲器来调用解码器? 在将数据流馈送到解码器之前、我是否应该等待 SPS 和 PPS 直至 IDR 或其他单位? 我是否应该忽略 NAL 单元并按原样馈送单个缓冲器? 我应该如何处理已消耗的字节数? 如果这些字节仅消耗输入 NAL 单元的一部分、会发生什么情况? 客户端测试示例有许多选项、非常令人困惑。 我需要一组有效的选项。

    2.是否允许将输出缓冲器作为输入缓冲器从解码器直接传递到 h264编码器? 我知道他们都使用相同格式的 YUV420SP、我使用解码器输出宽度、高度和间距来调节编码器、并在我将输入缓冲器指针作为解码器的输出时将其分配给 Y (0)和 UV (1)。 此输出/输入缓冲器的缓存和对齐要求是否相似?

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

    您好、Gadi、

    您能否共享您使用的位流(基本.264文件)?

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

    Prashanth、您好!

    您可以使用以下链接下载示例视频文件: H.264视频

    谢谢、

    Gadi

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

    尊敬的 Gadi:
    感谢您分享这一数据流。
    在这里、我看到流以 P 帧开始、它具有 SPS&PPS 信息。 但 I 帧没有任何 SPS&PPS 信息。
    这不是预期行为! 您能否检查它为什么编码如此?
    I 帧应具有 SPS&PPS 信息。

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

    尊敬的 Prashanth:

    感谢您在我们的系统中发现此错误、该系统涉及 SPS 和 PPS 相对于 I-Frame 的阶数。

    以下是一个新文件、有望修复此问题: H.264示例文件

    但是、这并不会改变这样一个事实、即我仍然无法在没有大量错误的情况下对该文件进行解码、并且在重新编码后看到任何可识别的文件。

    您是否能够使用 TI DM36x H.264解码器对其进行解码? 如果是、您能告诉我我在解码器参数、NAL 单元解析、如何为解码器提供输入缓冲器等方面应该做些什么吗?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    好的、我发现了问题。 它是输入数据缓冲器的分配。 将分配更改为 CMEM_alloc、如解码器示例中所示、解决了问题、现在帧已正确解码、没有错误、并在重新编码后正确显示。

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

    尊敬的 Gadi:

    知道它已经解决了。 感谢您的关闭。