我有视频观看次数。此视图包含在名为FrameLayout
的自定义VideoStructure
中,我还可以在其中添加频道徽标或类似内容。
在正常情况下,视频是硬件加速的,因此视图(我认为)实际上是一个透明的“黑洞”,而视频是解码的。由相关硬件提供。
我的问题是,如果我在视频视图的容器中覆盖draw()
(图片中的VideoStructure
扩展FrameLayout
)来绘制一些内容(即图像中的圆圈) OVER 视频 - 我重写draw()
,而不是onDraw()
- 这会破坏硬件加速吗?我可以期待这样做有很大的性能影响吗?
答案 0 :(得分:2)
它应该对性能没有影响。
SurfaceViews有两个部分,“视图”部分和“表面”部分。 “视图”部分是与其他视图匹配的透明孔,“表面”部分是完全独立的层,由系统与视图层合成。视频正被发送到“表面”部分。
如果您覆盖SurfaceView的“视图”渲染器,您将获得一个通常完全透明的视图的硬件加速Canvas(因此,如果您删除它,最好使用零的alpha和正确的传输模式)。
如果您尝试在“表面”部分渲染,通过从lockCanvas()
获取画布,您将失败(因为视频实际上已将其锁定),或者成功并阻止视频写入其中
无论“视图”图层中出现什么,系统合成器都必须混合“视图”和“表面”图层,因此使多个像素不透明不会产生可测量的影响。< / p>
更新:有关曲面和合成的详细信息,请参阅graphics architecture doc。