安卓奇巧 4.4.2 : Adaptive Playback impact on SurfaceFlinger

标签 android video android-4.4-kitkat stagefright surfaceflinger

我遇到了这个 generic question on Adaptive PlaybackAndroid Kitkat 中。但是,我有一些具体的问题如下:

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

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

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

如果是这样,Surfaceflinger/SurfaceTexture 如何知道传入的有效载荷是 metadata 格式以及它如何检索 widthheight 来自底层 gralloc 实现?

能否请您指出相关资源以帮助我更好地理解这个问题?

非常感谢。

最佳答案

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

只是澄清一下,让我们使用 QC 示例,组件识别裁剪变化 - 在此处查找 OMX_IndexConfigCommonOutputCrop omx_vdec , 然后 ACodec 清除 mSentFormat 这使得 ACodec 调用 sendFormatChange 发送 kWhatOutputFormatChange 事件到 NuPlayer 发送 MEDIA_SET_VIDEO_SIZE 到媒体播放器。在棍子的第二面,您将获得 native_window_set_buffers_geometry,它会强制 Surface::setBuffersDimensions

虽然使用 OMXCodec OMX_IndexConfigCommonOutputCrop 收到设置 mOutputPortSettingsHaveChanged,最近调用 OMXCodec::read 将返回 INFO_FORMAT_CHANGED AwesomePlayer 中的这个将使 notifyVideoSize_l 被调用并且这个发送到监听器 MEDIA_SET_VIDEO_SIZE

关于安卓奇巧 4.4.2 : Adaptive Playback impact on SurfaceFlinger,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21507591/

相关文章:

python - 制作视频文件索引

video - 从ffmpeg中的图像创建视频时设置比特率不起作用

android - Android 19 中未显示通知

android - 下次请求相同的图像 URL 时,如何强制 Picasso 缓存和使用调整大小的图像

android - 使用grep 读取文件中pattern1 的日志并仅打印包含pattern1 的行。当在文件中找到pattern2时停止搜索

Nginx 只允许我的域访问视频 url

java - 检测用户何时将其 Android 设备连接到电视

android - 三星设备上的 Proguard "Missing type parameter"

java - Firebase - 新依赖项 - 问题 : NoClassDefFoundError: Failed resolution (QueryListenOptions)

android - Listview 没有第一次更新我已经进入了 Activity Sound