调用SurfaceHolder.setFixedSize()有什么用?
What is the use of calling SurfaceHolder.setFixedSize()?
我有与网上流传的许多示例类似的代码:
mSurfaceHolder = mVideoSurface.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);
mSurfaceHolder.setFixedSize(20, 10);
然后在我的回调中:
@Override public void surfaceCreated(SurfaceHolder holder)
{
Log.d(TAG, "SurfaceCreated");
mSurfaceHolder.setFixedSize(20, 10);
}
@Override public void surfaceChanged(
SurfaceHolder holder, int format, int width, int height
)
{
Log.d(TAG, "SurfaceChanged to " +
format + " width " + width + " height " + height);
}
根据这段代码,我希望视频表面 to be set to the tiny size of 20x10 pixels,然后按比例缩小到我正在使用的任何布局大小,显示 pixelated/blurred 版本。但是,正在播放的视频在其完整的原始分辨率下看起来是正确的,它不会缩小到 20x10。但是我得到这样的日志:
SurfaceChanged to -2 width 20 height 10
因此,如果将视频表面设置为这么小的尺寸,但视频在图形上看起来仍然很清晰,那么设置表面尺寸有什么用?
获取完整的源代码
大小对于 OpenGL ES 之类的东西很重要,你可以在 Surface 上以任何大小绘制它。当您从相机或视频解码器发送数据缓冲区时,缓冲区会以相机或视频给定的大小到达。它已缩放以匹配 SurfaceView 的视图的大小,但未缩放以匹配 SurfaceView 的 Surface 的大小。
这两个概念交叉的地方是 Camera2 预览 API,在某些情况下,它显然会调整其捕获的大小以匹配 Surface。
您可以在 this blog post (demo here), and more about the graphics architecture as a whole in this doc 中阅读有关主要用例的更多信息。
我有与网上流传的许多示例类似的代码:
mSurfaceHolder = mVideoSurface.getHolder();
mSurfaceHolder.addCallback(this);
mSurfaceHolder.setFormat(PixelFormat.TRANSPARENT);
mSurfaceHolder.setFixedSize(20, 10);
然后在我的回调中:
@Override public void surfaceCreated(SurfaceHolder holder)
{
Log.d(TAG, "SurfaceCreated");
mSurfaceHolder.setFixedSize(20, 10);
}
@Override public void surfaceChanged(
SurfaceHolder holder, int format, int width, int height
)
{
Log.d(TAG, "SurfaceChanged to " +
format + " width " + width + " height " + height);
}
根据这段代码,我希望视频表面 to be set to the tiny size of 20x10 pixels,然后按比例缩小到我正在使用的任何布局大小,显示 pixelated/blurred 版本。但是,正在播放的视频在其完整的原始分辨率下看起来是正确的,它不会缩小到 20x10。但是我得到这样的日志:
SurfaceChanged to -2 width 20 height 10
因此,如果将视频表面设置为这么小的尺寸,但视频在图形上看起来仍然很清晰,那么设置表面尺寸有什么用?
获取完整的源代码大小对于 OpenGL ES 之类的东西很重要,你可以在 Surface 上以任何大小绘制它。当您从相机或视频解码器发送数据缓冲区时,缓冲区会以相机或视频给定的大小到达。它已缩放以匹配 SurfaceView 的视图的大小,但未缩放以匹配 SurfaceView 的 Surface 的大小。
这两个概念交叉的地方是 Camera2 预览 API,在某些情况下,它显然会调整其捕获的大小以匹配 Surface。
您可以在 this blog post (demo here), and more about the graphics architecture as a whole in this doc 中阅读有关主要用例的更多信息。