2

我在SO中遇到了关于Adaptive Playback的这个通用问题。Android Kitkat但是,我有一些具体的查询如下:

我能够理解对codec相关框架的影响。但是,有一点我无法完全理解。

在自适应播放的情况下,编解码器metadata在其输出端口上使用一个基本上抽象和打包底层缓冲区句柄(很可能是gralloc句柄)的输出端口。如果分辨率发生变化,我假设直接codec更新gralloc句柄属性并将缓冲区发送回OMX客户端而不更改端口设置。

我的第一个问题是:我的理解和假设是否正确?

如果是这样,Surfaceflinger/如何SurfaceTexture知道传入的有效负载是metadata格式的,它如何从底层实现中检索width和?heightgralloc

您能否指出相关来源,这将有助于我更好地理解这个问题?

提前谢谢了。

4

1 回答 1

1

sendFormatChange=>kWhatOutputFormatChange=>MEDIA_SET_VIDEO_SIZE=> ... =>native_window_set_buffers_dimensions

只是澄清一下,让我们使用 QC 示例,组件识别裁剪变化 - 在OMX_IndexConfigCommonOutputCrop这里查找 omx_vdec,然后 ACodec 清除mSentFormat这使得 ACodec 调用sendFormatChangekWhatOutputFormatChange事件发送到 NuPlayer 发送MEDIA_SET_VIDEO_SIZE到媒体播放器。在棍子的第二面,你会得到native_window_set_buffers_geometry哪些力量Surface::setBuffersDimensions

虽然 OMXCodec 用于OMX_IndexConfigCommonOutputCrop接收集mOutputPortSettingsHaveChanged,但最近的调用将在 AwesomePlayer中OMXCodec::read返回此将被调用并将此发送给侦听器INFO_FORMAT_CHANGEDnotifyVideoSize_lMEDIA_SET_VIDEO_SIZE

于 2014-02-03T14:43:34.580 回答