-1

“华为P30使用MediaCodec硬件对H264码流进行解码,然后直接渲染到TextureView进行显示。”

发现与其他手机平台相比,华为P30的延迟比其他手机多200ms左右。

在配置使用MediaCodec的过程中,发现了一些Native fw层的错误日志,虽然可以正常解码渲染;

执行MediaCodec.configure(****)时报如下错误:

D/SurfaceUtils: connecting to surface 0xc3a99808, reason connectToSurface
I/MediaCodec: [OMX.hisi.video.decoder.avc] setting surface generation to 33448961
D/SurfaceUtils: disconnecting from surface 0xc3a99808, reason connectToSurface(reconnect)
D/SurfaceUtils: connecting to surface 0xc3a99808, reason connectToSurface(reconnect)
E/ACodec: [OMX.hisi.video.decoder.avc] setPortMode on output to DynamicANWBuffer failed w/ err -2147483648
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:1(BT709_5), M:1(BT709_5), T:3(SMPTE170M)) and dataspace 0x104

解码过程中出现以下警告:

I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) and dataspace 0x102
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] got color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) err=0 (NO_ERROR)
I/ACodec: [OMX.hisi.video.decoder.avc] using color aspects (R:2(Limited), P:3(BT601_6_625), M:3(BT601_6), T:3(SMPTE170M)) and dataspace 0x102
D/SurfaceUtils: disconnecting from surface 0xc3a99808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils: connecting to surface 0xc3a99808, reason setNativeWindowSizeFormatAndUsage
D/SurfaceUtils: set up nativeWindow 0xc3a99808 for 720x1280, color 0x30d, rotation 0, usage 0X20002900
W/ACodec: [OMX.hisi.video.decoder.avc] setting nBufferCountActual to 11 failed: -2147483648"
4

1 回答 1

1

这些日志与延迟无关。如果OMX.hisi.video.decoder.avc硬件解码器部分配置不支持,会打印日志,方便故障定位。

(例如粗体的DynamicAnwBuffer为端口配置,不支持则使用其他端口模式,不影响解码。)

200ms的延迟不知道怎么计算,可以分为H.264视频解码时间和渲染到TextureView的时间,。</p>

要获取解码延迟,可以通过在输入解码数据和得到解码输出时添加log来获得具体的时间差。对比其他手机的时差,进一步分析时差。

此外,解码器和纹理配置(如分辨率和帧率)也会影响性能。或者,您可以为研发工程师提供一种方法来重现问题以进行分析。

谢谢您的支持!

于 2020-06-30T10:09:04.403 回答