OutputConfiguration
类是 Android 硬件 camera2 API 中用于配置和管理相机捕获会话输出目标的关键类。
主要方法
- 构造方法:
OutputConfiguration(Surface surface)
:使用指定的 Surface 初始化一个OutputConfiguration
对象。OutputConfiguration(Size size, Class<T> klass)
:使用指定的大小和 Surface 类型创建一个延迟配置的OutputConfiguration
对象。
- 表面管理:
void addSurface(Surface surface)
:向OutputConfiguration
添加一个新的 Surface,可用于添加初始 Surface 之外的附加 Surface。void removeSurface(Surface surface)
:从OutputConfiguration
中移除一个 Surface。如果该 Surface 不是此配置的一部分或者是主要 Surface,则会抛出IllegalArgumentException
异常。
- 配置检索:
List<Surface> getSurfaces()
:返回与此OutputConfiguration
关联的 Surface 的不可变列表。Surface getSurface()
:返回与此OutputConfiguration
关联的主要 Surface。int getRotation()
:获取此OutputConfiguration
的旋转配置。int getSurfaceGroupId()
:检索此配置的 Surface 组 ID,默认值为 -1。String getPhysicalCameraId()
:获取为此OutputConfiguration
设置的物理相机 ID。
- 表面共享:
void enableSurfaceSharing()
:允许多个 Surface 共享相同的OutputConfiguration
。boolean isSurfaceSharingEnabled()
:检查是否启用了 Surface 共享。
- 延迟配置:
boolean isDeferredConfiguration()
:检查OutputConfiguration
是否是延迟配置。boolean isDeferredConfigurationEnabled()
:返回是否支持延迟配置。
- 其他:
int getMaxSharedSurfaceCount()
:返回可以添加到此OutputConfiguration
的最大 Surface 数量。void writeToParcel(Parcel dest, int flags)
:用于将此对象打包到 Parcel 中。
使用示例
基本使用:
// 创建一个包含主要 Surface 的 OutputConfiguration
Surface previewSurface = ...; // 初始化你的 Surface
OutputConfiguration config = new OutputConfiguration(previewSurface);
// 使用该配置创建捕获会话
List<OutputConfiguration> outputConfigs = Arrays.asList(config);
CameraCaptureSession.StateCallback stateCallback = ...; // 你的状态回调
cameraDevice.createCaptureSessionByOutputConfigurations(outputConfigs, stateCallback, null);
添加多个 Surface:
// 创建一个包含主要 Surface 的 OutputConfiguration
OutputConfiguration config = new OutputConfiguration(previewSurface);
// 添加附加的 Surface
Surface recordingSurface = ...; // 初始化另一个 Surface
config.addSurface(recordingSurface);
// 如果需要,启用 Surface 共享
config.enableSurfaceSharing();
处理延迟配置:
// 创建一个延迟配置的 OutputConfiguration
Size surfaceSize = new Size(1920, 1080);
OutputConfiguration deferredConfig = new OutputConfiguration(surfaceSize, SurfaceTexture.class);
// 稍后,当准备好时设置实际的 Surface
Surface deferredSurface = ...; // 初始化延迟的 Surface
deferredConfig.addSurface(deferredSurface);
这些示例展示了如何使用 OutputConfiguration
类设置和管理相机捕获会话的输出。此类允许灵活处理相机输出,包括延迟配置和 Surface 共享功能。有关更多详细信息,请参阅官方 Android 文档。