createCameraWithSettings method

  1. @override
Future<int> createCameraWithSettings(
  1. CameraDescription cameraDescription,
  2. MediaSettings? mediaSettings
)

Creates an uninitialized camera instance and returns the cameraId.

Pass MediaSettings() for defaults

Implementation

@override
Future<int> createCameraWithSettings(
  CameraDescription cameraDescription,
  MediaSettings? mediaSettings,
) async {
  try {
    if (!camerasMetadata.containsKey(cameraDescription)) {
      throw PlatformException(
        code: CameraErrorCode.missingMetadata.toString(),
        message:
            'Missing camera metadata. Make sure to call `availableCameras` before creating a camera.',
      );
    }

    final int textureId = _textureCounter++;

    final CameraMetadata cameraMetadata = camerasMetadata[cameraDescription]!;

    final CameraType? cameraType = cameraMetadata.facingMode != null
        ? _cameraService.mapFacingModeToCameraType(cameraMetadata.facingMode!)
        : null;

    // Use the highest resolution possible
    // if the resolution preset is not specified.
    final Size videoSize = _cameraService.mapResolutionPresetToSize(
        mediaSettings?.resolutionPreset ?? ResolutionPreset.max);

    // Create a camera with the given audio and video constraints.
    // Sensor orientation is currently not supported.
    final Camera camera = Camera(
      textureId: textureId,
      cameraService: _cameraService,
      options: CameraOptions(
        audio: AudioConstraints(enabled: mediaSettings?.enableAudio ?? true),
        video: VideoConstraints(
          facingMode:
              cameraType != null ? FacingModeConstraint(cameraType) : null,
          width: VideoSizeConstraint(
            ideal: videoSize.width.toInt(),
          ),
          height: VideoSizeConstraint(
            ideal: videoSize.height.toInt(),
          ),
          deviceId: cameraMetadata.deviceId,
        ),
      ),
      recorderOptions: (
        audioBitrate: mediaSettings?.audioBitrate,
        videoBitrate: mediaSettings?.videoBitrate,
      ),
    );

    cameras[textureId] = camera;

    return textureId;
  } on PlatformException catch (e) {
    throw CameraException(e.code, e.message);
  }
}