【问题标题】:Android Kitkat 4.4.2: Adaptive Playback impact on SurfaceFlingerAndroid Kitkat 4.4.2:自适应播放对 SurfaceFlinger 的影响
【发布时间】:2014-02-25 18:32:02
【问题描述】:

我在 SO 中的 Android Kitkat 中遇到了这个 generic question on Adaptive Playback。但是,我有一些具体的查询如下:

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

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

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

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

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

非常感谢。

【问题讨论】:

  • 每个 gralloc 缓冲区都有一个标头,用于指定数据的尺寸和像素格式。 SurfaceFlinger 总是接收缓冲区(通过句柄传递,通过 BufferQueue); “元数据模式”是一个媒体编解码器的概念。一切都通过 BufferQueue(android.googlesource.com/platform/frameworks/native/+/… 和附近的 .cpp)。哎呀,一些关键的东西 BufferQueue——仔细看看ANativeWindow。
  • @fadden.. 感谢您的回复。我知道BufferQueue 及其含义。我的问题是针对VideoDecoderMetadata 受雇于Adaptive Playback。在这种情况下,BufferQueue 不会像在当前实现中那样得到显式的分辨率更改,即当分辨率更改时不会调用native_window_set_buffers_geometry。在这种情况下,我想了解SurfaceFlinger / HwComposer 如何处理相同的问题?是否有任何明确的规则或期望由供应商处理?我找不到这个例子。

标签: android video android-4.4-kitkat stagefright surfaceflinger


【解决方案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,但最近调用 OMXCodec::read 将返回 INFO_FORMAT_CHANGED 这在 AwesomePlayer 中将使 notifyVideoSize_l 被调用,并将此发送给侦听器 MEDIA_SET_VIDEO_SIZE

【讨论】:

  • @rg2...sendFormatChange 在底层 OMX 组件返回端口设置更改时触发。对于Adaptive Playback,情况并非如此,因为组件不会返回端口设置更改。因此,我的问题是SF 将如何处理同样的问题......如果我误解了同样的问题,请纠正我......
  • 不,请检查ExecutingState::onOMXEvent,为此使用了OMX_IndexConfigCommonOutputCrop
  • @rg2.. 总而言之,组件应调用 portSettingsChange 并将 data2 设置为更改裁剪尺寸。然后将其拾取AwesomePlayer,它将设置裁剪窗口,将其设置为原生窗口并通知更高层。这是一个正确的总结吗?如果是这样,我可以编辑您的回复以添加更多详细信息并接受相同的内容吗?谢谢。
  • 我添加了详细的描述来回答。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-04-08
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多