[英]Android Kitkat 4.4.2: Adaptive Playback impact on SurfaceFlinger
我在Android
Kitkat
的SO中遇到了有关自适应播放的通用问题 。 但是,我有一些特定的查询,如下所示:
我能够理解对codec
和相关框架的影响。 但是,有一点我无法完全理解。
在自适应播放的情况下,编解码器会在其输出端口上使用metadata
,该metadata
基本上会抽象并打包基础缓冲区句柄(很可能是gralloc
句柄)。 如果分辨率发生变化,我认为codec
将直接更新gralloc
句柄属性,并将缓冲区发送回OMX
客户端,而无需更改端口设置。
我的第一个问题是:我的理解和假设正确吗?
如果是这样, Surfaceflinger
/ SurfaceTexture
如何知道传入的有效载荷是metadata
格式,以及它如何从底层gralloc
实现中检索width
和height
?
您能否指出我相关的资源,以帮助我更好地理解这个问题?
提前谢谢了。
sendFormatChange => kWhatOutputFormatChange => MEDIA_SET_VIDEO_SIZE => ... =>本机窗口集_缓冲区大小
只是澄清一下,让我们使用QC示例,组件识别作物变化-在此处查找OMX_IndexConfigCommonOutputCrop
omx_vdec ,然后ACodec清除mSentFormat
这使ACodec调用sendFormatChange
,后者将kWhatOutputFormatChange
事件发送到NuPlayer,后者将MEDIA_SET_VIDEO_SIZE
发送到媒体播放器。 在摇杆的第二侧,您将获得native_window_set_buffers_geometry
,该值强制Surface::setBuffersDimensions
。
当使用OMX_IndexConfigCommonOutputCrop
接收到的集合mOutputPortSettingsHaveChanged
,最接近的OMXCodec::read
调用将返回INFO_FORMAT_CHANGED
这在AwesomePlayer中将使notifyVideoSize_l
被调用,并且该消息将发送到侦听器MEDIA_SET_VIDEO_SIZE
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.