android - surfaceview 容器中的 onDraw 会导致视频失效吗?

标签 android optimization surfaceview android-videoview hardware-acceleration

我有一个视频观看。此 View 包含在名为 VideoStructure 的自定义 FrameLayout 中,我还可以在其中放置 channel Logo 或类似内容。 enter image description here 在正常情况下,视频是硬件加速的,所以 View (我想)实际上是一个透明的“黑洞”,而视频是由相关硬件解码和渲染的。

我的问题是,如果我重写视频 View 容器中的 draw()(图像中的 VideoStructure 扩展了 FrameLayout)来绘制一些东西(即图像中的圆圈)OVER 视频 - 我正在覆盖 draw(),而不是 onDraw() - 将这个破解硬件加速?我可以期望这样做会带来很大的性能影响吗?

最佳答案

它应该不会影响性能。

SurfaceView 有两部分,“ View ”部分和“表面”部分。 “ View ”部分是一个透明孔,与其他 View 相适应,“表面”部分是一个完全独立的层,由系统与 View 层合成。视频正在发送到“表面”部分。

如果您重写 SurfaceView 的“ View ”渲染器,您将获得通常完全透明的 View 的硬件加速 Canvas (因此,如果您删除它,最好使用零 alpha 和正确的传输模式)。

如果您尝试在“表面”部分进行渲染,通过从 lockCanvas() 获取 Canvas ,您将失败(因为视频有效地锁定了它),或者成功并阻止视频从被写入它。

无论“ View ”层中出现什么,系统合成器都必须混合“ View ”层和“表面”层,因此使更多像素不透明不会产生可衡量的影响。

更新:请参阅 graphics architecture doc有关表面和成分的更多详细信息。

关于android - surfaceview 容器中的 onDraw 会导致视频失效吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23133739/

相关文章:

java - android - 菜单项未显示在操作栏中

android - 键入 Android Junit4 不存在异常

返回 NullPointerException 的 Java 文件

mysql - 哪个最快? SELECT SQL_CALC_FOUND_ROWS FROM `table` 或 SELECT COUNT(*)

android - 两个带线程的 SurfaceView - 相机预览无法恢复

android - 如何在 SurfaceView 中将文本旋转 180 度

java - 安卓工作室 : how to remove navigation bar in android app to get a full screen view?

c# - 优化多重比较条件

python - 将一个大长方体切割成尺寸在一定范围内的随机小长方体

java - 在没有布局的情况下以编程方式创建 ImageView