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.

[参考译文] Linux/DRA746:如何从流头获取原始 w/h

Guru**** 2589300 points


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

https://e2e.ti.com/support/processors-group/processors/f/processors-forum/640234/linux-dra746-how-to-get-orignal-w-h-from-stream-header

器件型号:DRA746

工具/软件:Linux

您好 RAM、  

我可以从解析流头获取 w/h、如下所示。

1.将 IVIDDEC3_DynamicParams 的假名标头设置为 XDM_parse_header

调用 XDM_SETPARAMS

调用 XDM_getStatus、正确的 w/h 存储在 outputHeight/outputWidth 中

但是、w/h 我在步骤3中对齐了。

240x180与240*192对齐,这是不可预料的。

那么、如何获得原始宽度和 hegiht?

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高您好、
    您看到哪个解码器的高度正在对齐?

    RAM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    264解码器
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高您好、
    您能不能共享一个流的小转储。 我没有具有此分辨率的流。

    RAM
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    我对 MPEG4解码器进行一些测试、我发现 MPEG4解码器返回应用程序的原始宽度和高度、这与264不同。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    e2e.ti.com/.../test1.mp4

    您好 RAM、

    我附加此 mp4、您可以对该文件执行一些进一步的检查

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    您好 RAM、
    与1080p 一样、264解码器将从数据流报头返回1920x1088解析、而不是1920x1080
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。

    高您好、

    我已为该流附加了 Elecard 分析器快照、它看起来解码器尊重 pic_height_in_map_units_minus1、同时派生了 frame_height、还尊重裁剪信息以 提供180作为输出视频。

    我将在与编解码器团队确认后通知您。

    RAM

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

    高您好、

    从 RAM 进行上述开机自检是正确的。 它相对于 H.264标准。

    使用 frame_crope_flag 编码的流将始终对齐。 如果禁用了 frame_crope_flag、则我们将获得实际宽度和高度。 在共享流中、实际高度可通过以下公式计算:

    实际高度=(pic_height_in_map_units_minus1 + 1)-(2 * frame_cROP_Bottom_FLAG)

               =(11Mbs + 1)-(2*6)

               = 12MBs (192像素)-(12)

               = 180像素。

    类似 HD (1920x1080)

    实际高度= 1088 -(2 * 4)

               = 1080。

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

    Prashanth、您好!  

    感谢您的回答。

    以上帖子是如何从线性光眼计算原始宽度和高度。

    我想知道如何根据 IVIDDEC3_Status 结构从流头获取原始 w/h?

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

    高您好、

    是的、这就是如何在 H.264中计算实际分辨率。 具体而言、

    if (frame_crope_flag){

    宽度=((pic_width_in_MBS_minus1 +1)*16)- frame_cROP_LEFT_offset*2 - frame_cROP_RIGHT offset*2;
    高度=((2 - FRAME_MBS_ONLY _FLAG)*(pic_height_in_map_units_minus1 +1)* 16)-(FRAME_CROP_TOP_OFFSET * 2)-(FRAME_CROP_Bottom_OFFSET * 2);

    FRAME_CROP_FLAG 等于0时、应推断以下值:FRAME_CROP_LEFT_OFFSET = 0、FRAME_CROP_RIGHT 偏移= 0、FRAME_CROP_TOP_OFFSET = 0和 FRAME_CROP_Bottom偏移= 0。

    以上内容符合 H.264规格。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、您好!
    上述回答帖子意味着我应该自行解析流头以获取 FRAME_CROP_LEFT_OFFSET/FRAME_CROP_RIGHT OFFSET /FRAME_CROP_Bottle_OFFSET/PASE_WIDTH_IN_MBS_MINUS1/FRAME_CROP_FLAG。 我无法直接从264解码器获得实际分辨率?

    最好的平地机
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、您好!
    上面的回答文章告诉我如何从 sps/pps 获取原始宽度和高度、而应用程序可以使用 ffmpeg thirdparty 库进行解析。
    但我想知道如何在不解析 sps/pps 的情况下直接获取原始宽度和高度、因为我已经使用 TI 264解码器来解析流头。
    我似乎 TI 264解码器不支持此功能?

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

    高您好、

    通过对此进行更多分析、我得到了一些要点、可以与您分享。

    符合 H.264规范。 XDM_getStatus 调用将给出对齐的宽度和高度。 缓冲区分配需要对齐的分辨率。

     实际的宽度和高度可以在解码完整帧后从,outArgs->displayBufs.activeFrameRegion 中找到。

    ACTIVE1帧区域(software-dl.ti.com/.../struct_i_v_i_d_e_o2___buf_desc.html

    请参阅附录 A (H.264用户指南中的图片格式)。 在此处附加用户指南的快照。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    高您好、
    有关其返回对齐分辨率的原因的更多信息。

    应用程序将执行 XDM_GETBUFINFO 控制调用以了解缓冲区要求。 编解码器将返回对齐的宽度和高度。 应用程序必须为对齐的分辨率分配缓冲区、以避免缓冲区损坏。 如果缓冲区被分配给实际宽度和高度、缓冲区将被破坏、并且不会看到任何输出。

    这就是 XDM_GESTATUS 具有对齐分辨率的原因。 当帧准备好显示时,将在 outArgs->displayBufs.activeFrameRegion 返回实际分辨率。
  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、您好!
    如上所述,我尝试获得原始分辨率,有时 mOutArgs->displayBufs.bufDesc[0]。activeFrameRegion 在启动时返回无效值。 日志如下所示、我获得了正确的分辨率、直到输入帧计数为13。

    ===========================
    第5113行:11-13 18:07:05.327 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESR、484) VIDDEC3_Process mInCount 1、mInArgs->inputID=bb3720fd0、FD 0x23、 mInput bb0223000,大小817,字节消耗817,时间戳0.000,错误-1
    5115行:11-13 18:07:05.327 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5117行:11-13 18:07:05.327 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLICE XDM_APPLIEDCONCEALMNGTRUTEDM_CORTEATA
    第5153行:11-13 18:07:05.330 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESRATer、484) VIDDEC3_Process mInCount 2、mInArgs->inputID=bb3720820、FD 0x2b、 mInput 0xa953d000、大小13、字节消耗13、时间戳0.060、错误-1
    第5155行:11-13 18:07:05.330 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5157行:11-13 18:07:05.330 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLICM_APPLIEDCONCEALMSNGTRUDATA_CORTERAT_CORTERATE_ERR_RESTONGERR
    第5291行:11-13 18:07:05.333 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 3、mInArgs->inputID=bb3720670、FD 0x2D、 mInput 0xa9531000、大小12、字节消耗12、时间戳0.040、错误-1
    第5303行:11-13 18:07:05.333 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5379行:11-13 18:07:05.337 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLXDM_APPLIEDCONCEALMSNGTRUTERAT_CORTEATA
    第5455行:11-13 18:07:05.342 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 4、mInArgs->inputID=bb3721050、FD 0x2F、 mInput 0xa9525000、大小12、字节消耗12、时间戳0.020、错误-1
    第5459行:11-13 18:07:05.343 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    5473行:11-13 18:07:05.343 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLXDM_APPLIEDCONCEALMSNGTRUDATA_CORTERAT_CORTOR_ERRIDENT
    第5509行:11-13 18:07:05.350 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、processBuffer、484) VIDDEC3_Process mInCount 5、mInArgs->inputID=bb3721088、FD 0x31、 mInput 0xa9519000、大小2885、字节消耗2885、时间戳0.080、错误-1
    第5511行:11-13 18:07:05.351 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5513行:11-13 18:07:05.351 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLICM_APPLIEDCONCEALMSNGTRUDATA_CORTERAT_CORTEATA
    第5589行:11-13 18:07:05.354 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_PROCESS mInCount 6、mInArgs->inputID=bb37210c0、FD 0x33、 mInput 0xa950d000、大小735、字节消耗735、时间戳0.140、错误-1
    第5619行:11-13 18:07:05.356 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5621行:11-13 18:07:05.356 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0xa10、IH264VDEC_ERR_MBDATA XDM_APPLIEDCONCEALMXDM_CORTEDATA
    第5643行:11-13 18:07:05.359 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_PROCESS mInCount 7、mInArgs->inputID=bb3720ff0、FD 0x35、 mInput 0xa9501000、大小393、字节消耗393、时间戳0.120、错误-1
    第5647行:11-13 18:07:05.359 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5649行:11-13 18:07:05.359 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLDM_APPLIEDCONCEALMSNGTRUDATA_CORTERAT_CORTOR_ERR_RESTONGATA
    第5793行:11-13 18:07:05.374 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESRATer、484) VIDDEC3_Process mInCount 8、mInArgs->inputID=bb3721180、FD 0x37、 mInput 0xa94f5000、大小91、字节消耗91、时间戳0.100、错误-1
    第5797行:11-13 18:07:05.375 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5799行:11-13 18:07:05.375 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLICE XDM_APPLIEDCONCEALMNGTRUTEDM_CORTEATA
    第5851行:11-13 18:07:05.379 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 9、mInArgs->inputID=b37211b8、FD 0x23、 mInput bb0223000,大小819,字节消耗819,时间戳0.200,错误-1
    第5853行:11-13 18:07:05.379 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5855行:11-13 18:07:05.379 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLXDM_APPLIEDCONCEALMSNGTRUDATA_CORTERAT_CORETA
    5909行:11-13 18:07:05.384 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 10、mInArgs->inputID=bb37211f0、FD 0x2b、 mInput 0xa953d000、大小52、字节消耗52、时间戳0.180、错误-1
    第5911行:11-13 18:07:05.384 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(0、0)、(0、 0)
    第5913行:11-13 18:07:05.384 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0xa10、IH264VDEC_ERR_MBDATA XDM_APPLIEDCONCEALMXDM_CORTERATE
    第5959行:11-13 18:07:05.389 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 11、mInArgs->inputID=bb3721228、FD 0x2D、 mInput 0xa9531000、大小74、字节消耗74、时间戳0.160、错误-1
    线路5961:11-13 18:07:05.389 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、处理器缓冲器、490)(0、0)、(0、 0)
    5963行:11-13 18:07:05.389 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0xa10、IH264VDEC_ERR_MBDATA XDM_APPLIEDCONCEALMXDM_CORTEPTE
    第6011行:11-13 18:07:05.393 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 12、mInArgs->inputID=bb3721260、FD 0x2F、 mInput 0xa9525000、大小302、字节消耗302、时间戳0.220、错误-1
    第6013行:11-13 18:07:05.393 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、处理器缓冲器、490)(0、0)、(0、 0)
    第6015行:11-13 18:07:05.393 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0x2000a00、IH264VDEC_ERR_MISSIENT SLDM_APPLIEDCONCEALMSNGTRUDATA_CORTERAT_CORETA
    第6067行:11-13 18:07:05.397 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 13、mInArgs->inputID=bb3721298、FD 0x31、 mInput 0xa9519000、Size 3708、bytesConsumed 3708、timestamp 0.240、err -1
    第6069行:11-13 18:07:05.397 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(32、24)、(272、 204)
    第6071行:11-13 18:07:05.397 15286 15301 D 解码器基址:[TI](decoder_base.cc、processBuffer、511) Get 输出帧、mInCount:013、mOutCount:001、 outBuf:bb3720fd0、drmName:20
    第6073行:11-13 18:07:05.397 15286 15301 D 解码器基础:[TI](DECODER_BASE.cc、PROCBuffer、525) FreeBufID[0]:b3720fd0 FD:63
    第6075行:11-13 18:07:05.397 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0xa10、IH264VDEC_ERR_MBDATA XDM_APPLIEDCONCEALMXDM_CORTEDATA
    第6187行:11-13 18:07:05.404 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESR、484) VIDDEC3_Process mInCount 14、mInArgs->inputID=bb37212d0、FD 0x33、 mInput 0xa950d000、大小261、字节消耗261、时间戳0.300、错误-1
    第6189行:11-13 18:07:05.404 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(32、24)、(272、 204)
    线路6191:11-13 18:07:05.404 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、processBuffer、511) Get 输出帧、mInCount:014、mOutCount:002、 outBuf:bb3721050,drmName:23
    第6193行:11-13 18:07:05.404 15286 15301 D 解码器基址:[TI](decoder_base.cc、processBuffer、525) FreeBufID[0]:b3721050 FD:69
    第6195行:11-13 18:07:05.405 15286 15301 D DecoderH264:[TI](DECODER_h264.cc、checkExtendedErr、136) mOutArgs->ExtendedError 0xa10、IH264VDEC_ERR_MBDATA XDM_APPLIEDCONCEALMXDM_CORTERATE
    第6213行:11-13 18:07:05.408 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCESer、484) VIDDEC3_Process mInCount 15、mInArgs->inputID=bb37210f8、FD 0x35、 mInput 0xa9501000、大小83、字节消耗83、时间戳0.280、错误-1
    第6215行:11-13 18:07:05.408 15286 15301 D 解码器基址:[TI](DECODER_BASE.cc、PROCBuffer、490)(32、24)、(272、 204)
    ===========================================

    因此、264解码器是否将原始分辨率设置为输出宽度/输出高度 IVIDDEC3_Status 和应用程序是否执行对齐作业、就像 MPEG4/mpeg2解码器那样。

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

    高您好、

    这可能是可行的、因为 displayDelay   = IVIDDEC3_DISPLAY_DELAY_AUTO;这里、编解码器保存的缓冲区被指定为显示 w.r.t 的显示延迟。 当设置 为 IVIDDEC3_DISPLAY_DELAY_AUTO 时、它最多可容纳16帧。

    是否可以将其设置为 IVIDDEC3_DEDEC_ORDER ? 它应在解码第一帧后返回准确的分辨率。

  • 请注意,本文内容源自机器翻译,可能存在语法或其它翻译错误,仅供参考。如需获取准确内容,请参阅链接中的英语原文或自行翻译。
    Prashanth、您好!
    将 displayDelay 设置为 IVIDDEC3_DECDEG_ORDER 意味着输出帧顺序不正确、这是我所期望的。
    所以,我尝试使用 ffmpeg 第三方获得原始分辨率,现在它对我来说是很好的。
    感谢您的支持。

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

    高您好、

    是的、它将显示为"不按顺序"。 这只是为了在解码第一个帧后获得实际的帧分辨率。 稍后、建议将显示延迟设置为"自动"。 谢谢。 如果该线程回答了查询、我们可以关闭它吗?