检查x264 Nal单位的有效性

时间:2014-01-07 12:40:02

标签: c++ ffmpeg x264

我正在使用 x264编码器api ,其中对于每个编码图片,我获得了许多nal单位。有什么方法可以检查我的VS2010调试器中的nals是否有效。目前我可以看到以下信息::

i_ref_idc        -858993460
i_type           -858993460
b_long_startcode -858993460
i_first_mb       -858993460
i_last_mb        -858993460
i_payload        27
p_payload        0x06b94d68
i_padding        -858993460

我不确定这些负值是否代表nals无效或缺少信息 基本上我如何检查我从x264_encoder_encode()获得的nals是否是一个有效的nal单位?
注意 ::我正在使用这些nals使用LIVE555实时流式传输。

2 个答案:

答案 0 :(得分:2)

-858993460也称为0xССССССССindicate,这些值未被编码器初始化。

i_payloadp_payload是以字节为单位的有效负载大小和指向数据的指针。除了向解码器提供数据并测试输出和解码错误的可用性之外,基本上没有对这些数据进行有效性检查。

答案 1 :(得分:1)

这绝对无效。如果没有解析整个问题,你无法确定nalu是否100%有效。但你可以理智地检查价值观。

i_ref_idc是2比特字段。 0-3范围之外的任何事情都不合理。

i_type是5位。但实际上编码器只会产生1-15或19-21(含)。

b_long_startcode是布尔值,所以你不能理智地检查它

i_first_mb和i_last_mb将小于ceil(width/8.0) * ceil(height/8.0)

i_payload是p_payload指向的数据的大小,因此在此处选择一个较高的值。 10*with*height就足够了。