当前位置: 首页 > 知识库问答 >
问题:

Android调整VirtualDisplay大小

韩良策
2023-03-14

我有一些Android的MediaProjection API的问题(实际上更多,但这些是更关键的问题)。阅读图形架构并没有什么帮助,所以我只是想了解一下我是否在代码流中跳过了什么。

让我们假设:

>

  • 我有一个专用的GL呈现线程,已初始化,并在其上生成了一个GL纹理。我为纹理设置了WxH的默认缓冲区大小。

    问题3:在VirtualDisplay上调用resize()(同时调用setDefaultBUfferSize()到GL纹理之后,在90%的情况下会出现问题M#1(黑帧/剪切帧、其他屏幕区域的工件...)

    我在同一个线程中使用了对updateTextureImage->GL纹理绘制的调用序列,所以我的正常理解是,不应该发生我以某种方式从半满的GL缓冲区读取的情况,或者什么...对吧?

    我还通过将VirtualDisplay直接呈现到MediaCodec的表面(不涉及自定义GL)测试了这个问题--同样的行为。实际上,由于MediaCodec有一个固定大小的创建表面,所以不能再现bug,因为我们只能调整虚拟显示器的大小,而不能调整编码器表面的大小,所以这不是一个真正的bug(但即使是这样,VirtualDisplay也可以相应地调整表面的大小)。

    我感觉在关闭一个虚拟显示时有东西在泄漏,或者在VirtualDisplay的创建之间没有正确初始化,因为它不一致。一个全新的MediaProjection屏幕捕捉许可,一个全新的虚拟显示,一个刚刚创建的表面纹理,很有可能最终只给我半切的帧...留下我一张扑克脸...

    PS:这一切都发生在搭载Android6.0.1的Nexus6上。

  • 共有1个答案

    万俟鸿波
    2023-03-14

    我放弃了,只是重新创建了虚拟显示,使用了一个新的SurfaceTexture的新表面(但保留了GL纹理)。这消除了闪烁和一半大小的帧。我还收到了一些logcat警告,指出先前使用的SurfaceTexture的BufferQueue被放弃了,并且在VirtualDisplay上调用release()后获得了1或2个onFrameAvailable回调(它可能是异步的,应该等待stop()回调,但在这一点上太复杂了)。

    而且即使在完成了所有这些之后,一些非常奇怪的事情仍然会发生:有时捕获将只捕获我的应用程序。如果我向下刷状态栏,或者回家,一切都变成黑色(即使我的应用程序在状态栏窗口后面)。唯一的解决方案是关闭/打开屏幕,或者将Camera/Camera2预览呈现到我的SurfaceTexture中,然后重新创建VirtualDisplay。关于纹理的幕后肯定有问题。

    看起来像是virtualdisplay.resize()被破坏了,使用现有的SurfaceTexture创建新的虚拟显示也是如此。

     类似资料:
    • 我正在使用此库:https://github.com/yshrsmz/KeyboardVisibilityEvent检测键盘何时打开或关闭,这取决于android清单的输入。 此库可以完美地检测软键盘的打开和关闭事件,但由于adjustResize参数,我的内容被推到了视图之外。 > Java: XML: 因此,通过调整第二个编辑文本的行,这非常有效,因此我在键盘上方键入,但当我关闭键盘时,滚动到

    • 问题内容: 我已经在清单上声明了adMob 旋转设备时,它的大小已正确调整,但现在我必须添加到包含adMob的活动中,以防止重新加载活动。我可以达到,但是现在adMob在横向时不会缩放。onConfigChanges事件,现在我可以使用适当的景观尺寸强制调整adMob的大小。怎么样?谢谢。 问题答案: 我遇到了同样的问题,但是找到了解决方法。 我的AdView位于页面底部的相对布局中。加载时看起来

    • 问题内容: 打开虚拟键盘后,它将调整我的布局大小。我如何才能将键盘放在布局上?并没有改变我的布局尺寸? 问题答案: 您可以使用清单标志来配置虚拟键盘的效果。请参阅http://developer.android.com/guide/topics/manifest/activity- element.html#wsoft

    • 我正在尝试构建一个包含6个窗格(作为父级添加到GridPane布局中)的简单Java项目。我必须在开始时设置窗口大小,并通过参考根布局的宽度和高度,设法将它们均匀地拆分。 但我想要他们调整大小,因为我改变了窗口的大小(使用鼠标,现在他们得到固定的大小)。 下面是我的代码:

    • 在我应用程序清单中,我添加了Android:ConfigChanges来防止活动重新加载/在rotate上重新启动 它起作用了,但是supportActionBar(我使用的是AppCompat)用小字体保留了他的高度。 ActionBar在纵向上应该更大,在横向上应该更小,但它保持了初始值: null

    • 我有一个包含多个的布局,底部有一个按钮。当键盘显示时,我希望我的布局保持在键盘上方。我搜索这个问题,发现应该在清单的标签中放入