@class CVAFilterHybridResampling, CVAFilterDiffusion, CVAFilterBox, NSDictionary, MPSImageGuidedFilter, CVAFilterGuided, NSObject, MPSImageAreaMin, CVAFilterRenderStagelight, MPSImageGaussianBlur, CVAFilterInfimumConvolution, PTRenderRequest, PTRenderPipeline, CVAPhotoMTLRingBuffer, CVAFilterRenderComposite, CVAFilterColorAlphaToFgBg, MPSImageBox, NSData, CVAFilterMaskedVariableBlur, CVAFilterDistanceTransform; @protocol MTLTexture, MTLComputePipelineState, PTRenderState, OS_dispatch_queue, MTLPipelineLibrarySPI, MTLLibrary, OS_dispatch_semaphore, MTLDeviceSPI, MTLCommandQueue, MTLResourceGroupSPI; @interface VideoMattingMetal : ImageSaverRegistrator { id<MTLDeviceSPI> _device; id<MTLLibrary> _defaultLibrary; id<MTLPipelineLibrarySPI> _pipelineLibrary; id<MTLCommandQueue> _commandQueue; void *_metalContext; BOOL _mattingUsesPostprocessing; BOOL _renderingUsesPostprocessing; BOOL _enableInfConvolution; int _lastCommittedCommand; int _width; int _height; int _width2; int _height2; float _renderingDisparityBlurRadius; float _renderingLensFocalLength_mm; BOOL _useTemporalConfidence; CVAFilterBox *_boxFilter; CVAFilterHybridResampling *_hybridResampler; MPSImageGuidedFilter *_guidedFilter; CVAFilterGuided *_cvaGuidedFilter; CVAFilterRenderStagelight *_stagelightFilter; CVAFilterColorAlphaToFgBg *_colorAlphaToFgBg; CVAFilterRenderComposite *_renderComposite; CVAFilterDistanceTransform *_distanceTransform; BOOL _doDisparityDiffusion; CVAFilterDiffusion *_diffusion; CVAFilterInfimumConvolution *_infConvolution; float _infConvolutionScale; float _gammaExponent; id<MTLComputePipelineState> _diffusionMapKernel; id<MTLComputePipelineState> _fillBackgroundDisparityKernel; id<MTLComputePipelineState> _fillBackgroundDisparityKernel_faceMask; id<MTLComputePipelineState> _disparityConfidenceMaskKernel; id<MTLComputePipelineState> _disparityMasksKernel; id<MTLComputePipelineState> _disparityIsValidKernel; id<MTLComputePipelineState> _domainTransformXKernel; id<MTLComputePipelineState> _domainTransformYKernel; id<MTLComputePipelineState> _edgeAwareFillXKernel; id<MTLComputePipelineState> _edgeAwareFillYKernel; id<MTLComputePipelineState> _invalidDisparityMaskKernel; id<MTLComputePipelineState> _bgFillXKernel; id<MTLComputePipelineState> _bgFillYKernel; id<MTLComputePipelineState> _internalDisparityToCanonicalDisparityKernel; id<MTLComputePipelineState> _disparityDecimateKernel; id<MTLComputePipelineState> _alphaFillKernel; id<MTLComputePipelineState> _disparityCleanupKernel; id<MTLComputePipelineState> _disparityCleanupKernel_firstFrame; id<MTLComputePipelineState> _simpleConfidenceKernel; id<MTLComputePipelineState> _updateConfidenceAndLastValidDisparityKernel; id<MTLComputePipelineState> _updateConfidenceAndLastValidDisparityKernel_useTemporalConfidence; id<MTLComputePipelineState> _roughDisparityKernel; id<MTLComputePipelineState> _temporalDisparityFilterKernel; id<MTLComputePipelineState> _temporalDisparityFilterKernel_fallbackToInvalid; id<MTLComputePipelineState> _renderingDisparityDeweightKernel; CVAPhotoMTLRingBuffer *_disparityConfig; id<MTLComputePipelineState> _renderingDisparityFillAndFilterKernel; struct CompositeConfig { unsigned int frameNumber; unsigned int seedGeneratorFactor; int noiseBits; float noiseBitsFactor; float cubeIntensity; float noisePercentToAddAtInfinity; } _noiseConfig; CVAFilterMaskedVariableBlur *_maskedVariableBlur; id<MTLComputePipelineState> _halfDownSampler; id<MTLComputePipelineState> _colorSimKernel; id<MTLComputePipelineState> _colorSimL1Kernel; id<MTLComputePipelineState> _temporalCoefficientsFilterKernel; id<MTLComputePipelineState> _guidedFilterWeightKernel; NSObject<OS_dispatch_semaphore> *_semaphore; id<MTLTexture> _rTexture; id<MTLTexture> _gTexture; id<MTLTexture> _bTexture; id<MTLTexture> _bg; id<MTLTexture> _blurredBg; id<MTLTexture> _deweightedDisparity; id<MTLTexture> _shift[2]; id<MTLTexture> _coc; id<MTLTexture> _sdofYIntermediate; id<MTLTexture> _sdofUVIntermediate; id<MTLTexture> _sdofInYTexture; id<MTLTexture> _sdofInUVTexture; id<MTLTexture> _sdofOutYTexture; id<MTLTexture> _sdofOutUVTexture; id<MTLTexture> _coloredYTexture; id<MTLTexture> _coloredUVTexture; id<MTLTexture> _bgColorLut; id<MTLTexture> _fgColorLut; id<MTLTexture> _stageLightProxyLut; id<MTLTexture> _stageLightLut; id<MTLResourceGroupSPI> _backgroundTextureGroup; MPSImageBox *_disparityBlurBoxKernel; MPSImageBox *_fgBlurBoxKernel; MPSImageAreaMin *_fgMaskErosionKernel; id<MTLTexture> _gfForegroundMask; id<MTLTexture> _gfWeight; id<MTLTexture> _disparityLastValidValue[2]; id<MTLTexture> _disparity[2]; id<MTLTexture> _facemaskDisparity; id<MTLTexture> _filledDisparityTexture; id<MTLTexture> _filledDisparityNoInvalidTexture; id<MTLTexture> _temporallyFilteredDisparity; id<MTLTexture> _disparityConfidenceMaskTexture; id<MTLTexture> _smoothConfidence[2]; id<MTLTexture> _smoothDisparity[2]; id<MTLTexture> _roughDisparity; id<MTLTexture> _diffusionMapTexture; id<MTLTexture> _disparityIsValidTexture; id<MTLTexture> _distanceFromKnownDisparityTexture; id<MTLTexture> _domainTransformXTexture; id<MTLTexture> _domainTransformYTexture; id<MTLTexture> _edgeAwareFillTempTexture; id<MTLTexture> _bgFillTempTexture; id<MTLTexture> _invalidDisparityMaskTexture; id<MTLTexture> _initDisparity; id<MTLTexture> _outputCanonicalDisparity; id<MTLTexture> _coeff; id<MTLTexture> _coeffHistory[2]; id<MTLTexture> _isForegroundTexture; id<MTLTexture> _distanceToForegroundTexture; id<MTLTexture> _alphaNoPostprocessing; id<MTLResourceGroupSPI> _alphaNoPostprocessingGroup; id<MTLResourceGroupSPI> _edgeAwareGroup; id<MTLResourceGroupSPI> _bgFillGroup; id<MTLTexture> _scaledSource[2]; struct __CVBuffer *_scaledSourceCV[2]; id<MTLTexture> _tempFloatR32FloatTexture; struct __CVBuffer { } *_yuvSourceDownsampledBuffer; BOOL _doFaceMask; id<MTLTexture> _facemaskRegionTexture; unsigned long long _frameIndex; MPSImageGaussianBlur *_smoothFilter; struct __IOSurfaceAccelerator { } *_hwScaler; id<MTLTexture> _yuvSourceDownsampledTexture; NSData *_lastBgLutData; NSData *_lastFgLutData; NSData *_lastStageLightProxyCubeData; NSData *_lastStageLightCubeData; NSObject<OS_dispatch_queue> *_synchronousRenderingCallbackQueue; NSObject<OS_dispatch_semaphore> *_renderingCallbackSemaphore; NSObject<OS_dispatch_queue> *_synchronousMattingCallbackQueue; NSObject<OS_dispatch_semaphore> *_mattingCallbackSemaphore; BOOL _sdofRenderingHasForegroundBlur; PTRenderPipeline *_ptPipeline; id<PTRenderState> _ptRenderState; PTRenderRequest *_ptRequest; BOOL _sdofRenderingNeedsCropping; BOOL _renderStateIsConfigured; struct CGRect { struct CGPoint { double x; double y; } origin; struct CGSize { double width; double height; } size; } _previousRenderingRect; } @property BOOL isBgColorLutBlack; @property float renderingDisparityUpdateRate; @property BOOL bypassShiftCleanup; @property (readonly) id<MTLTexture> colorSim; @property (readonly) id<MTLTexture> filteredBeforeSmoothDisparity; @property (retain) NSDictionary *sbufMetadata; @property struct CGRect { struct CGPoint { double x; double y; } origin; struct CGSize { double width; double height; } size; } renderingRect; + (void)decomposeYuvPixelBuffer:(struct __CVBuffer { } *)a0 yTexture:(id *)a1 uvTexture:(id *)a2 device:(id)a3; + (void)saveTexture:(id)a0 toFilename:(id)a1; - (void)encodeDisparityCleanupToCommandBuffer:(id)a0 prevDisparity:(id)a1 currDisparity:(id)a2 colorSim:(id)a3 cleanDisparity:(id)a4; - (void)encodeDisparityDecimateToCommandBuffer:(id)a0 canonicalDisparity:(struct __CVBuffer { } *)a1 disparityOut:(id)a2; - (void)updateRenderRequestwithPerFrameMetadata:(id)a0 properties:(id)a1; - (void)dealloc; - (void)encodeDisparityTemporalFilterToCommandBuffer:(id)a0 currentDisparity:(id)a1 previousDisparity:(id)a2 currConfidence:(id)a3 prevSmoothConfidence:(id)a4 colorSim:(id)a5 outPrevSmoothConfidence:(id)a6 outTemporallyFilteredDisparity:(id)a7 disparityFallbackToInvalid:(BOOL)a8 disparityFilterUpdateRate:(float)a9 minimumConfidenceToKeepDisparity:(float)a10 maximumSimilarityToKeepDisparity:(float)a11; - (void)encodeColorSimL1ToCommandBuffer:(id)a0 prevSource:(id)a1 currSource:(id)a2 destination:(id)a3; - (void)encodeDisparitySmoothingToCommandBuffer:(id)a0 disparity:(id)a1; - (void)encodeFilterCoefficientToBuffer:(id)a0 inputCoeff:(id)a1 prevCoeff:(id)a2 outCoeff:(id)a3 inColorSim:(id)a4 updateRate:(float)a5; - (void)encodeUpdateConfidenceAndLastValidDisparityToCommandBuffer:(id)a0 disparity:(id)a1 prevSmoothConfidence:(id)a2 lastValidDisparityIn:(id)a3 lastValidDisparityOut:(id)a4 currConfidenceOut:(id)a5 useTemporalConfidence:(BOOL)a6; - (void)renderStageLightWithSource:(const struct __CVBuffer { } *)a0 alpha:(const struct __CVBuffer { } *)a1 canonicalDisparity:(const struct __CVBuffer { } *)a2 dstColor:(struct __CVBuffer { } *)a3 blackBackgroundIntensity:(float)a4 vignetteIntensity:(float)a5 isFinalStage:(BOOL)a6 callbackQueue:(id)a7 withCallback:(id /* block */)a8; - (void)encodeConfidenceMaskToCommandBuffer:(id)a0 inputDisparity:(id)a1 inputDisparityNoInvalid:(id)a2 outputConfidenceMask:(id)a3; - (void)downsampleWithHWScalerSource:(struct __CVBuffer { } *)a0 destination:(struct __CVBuffer { } *)a1; - (void)encodeInvalidDisparityMaskToCommandBuffer:(id)a0 inputDisparity:(id)a1 outputMask:(id)a2; - (void)encodeScaleSourceToCommandBuffer:(id)a0 source:(struct __CVBuffer { } *)a1 targetWidth:(unsigned long long)a2 targetHeight:(unsigned long long)a3; - (void)encodeBackgroundFillToCommandBuffer:(id)a0 inputDisparity:(id)a1 inputMask:(id)a2 outputDisparity:(id)a3; - (void)setStageLightProxyCubeData:(id)a0 cubeData:(id)a1; - (void)encodeForegroundMaskToBuffer:(id)a0 disparity:(id)a1 inSegmentation:(id)a2 useSegmentationOnly:(BOOL)a3 weight:(id)a4 foregroundMask:(id)a5 erodedForegroundMask:(id)a6 disparityMin:(float)a7 focusDisparity:(float)a8 hardness:(float)a9 minDistToDeweight:(float)a10 unconfidentWeight:(float)a11 dilateForegroundMask:(BOOL)a12 foregroundMaskDilationRadius:(float)a13; - (void)initSourceTexture:(struct __CVBuffer { } *)a0; - (void)cropFrame:(const struct __CVBuffer { } *)a0 destination:(struct __CVBuffer { } *)a1 rect:(struct CGRect { struct CGPoint { double x0; double x1; } x0; struct CGSize { double x0; double x1; } x1; })a2; - (void)encode420Bilinear2xDownsamplingToCommandBuffer:(id)a0 source:(struct __CVBuffer { } *)a1 destination:(struct __CVBuffer { } *)a2; - (void)alphaMattingWithPostprocessedDisparity:(const struct __CVBuffer { } *)a0 source:(const struct __CVBuffer { } *)a1 inSegmentation:(struct __CVBuffer { } *)a2 alpha:(struct __CVBuffer { } *)a3 staticParams:(const struct VideoMattingStaticParams { BOOL x0; unsigned int x1; unsigned int x2; unsigned int x3; unsigned int x4; unsigned int x5; unsigned int x6; int x7; int x8; unsigned int x9; float x10; float x11; float x12; float x13; float x14; float x15; float x16; float x17; float x18; float x19; float x20; unsigned int x21; unsigned int x22; int x23; float x24; float x25; float x26; float x27; } *)a4 dynamicParams:(const void *)a5 usePostprocessedDisparity:(BOOL)a6 isFinalStage:(BOOL)a7 dilateForegroundMask:(BOOL)a8 callbackQueue:(id)a9 callback:(id /* block */)a10; - (void)encodeGuidedFilterWeightToCommandBuffer:(id)a0 inputDisparity:(id)a1 inputSegmentation:(id)a2 useSegmentationOnly:(BOOL)a3 inputForegroundDistance:(id)a4 outputForegroundMask:(id)a5 outputWeight:(id)a6 minDistToDeweight:(float)a7 unconfidentWeight:(float)a8 dilateForegroundMask:(BOOL)a9 foregroundMaskDilationRadius:(float)a10; - (void)setPortraitForegroundCubeData:(id)a0 backgroundCubeData:(id)a1; - (void)encodeFillAlphaToCommandBuffer:(id)a0 alpha:(id)a1; - (void)setBgLut:(id)a0; - (void)encodeDomainTransformToCommandBuffer:(id)a0 inputDiffusionMap:(id)a1 inputDistanceFromKnownDisparity:(id)a2 outputDomainTransformX:(id)a3 outputDomainTransformY:(id)a4; - (void).cxx_destruct; - (void)encodeSimpleConfidenceToCommandBuffer:(id)a0 disparity:(id)a1 outConfidence:(id)a2; - (void)encodeDisparityMasksToCommandBuffer:(id)a0 inputDisparity:(id)a1 inputSegmentation:(id)a2 useSegmentationOnly:(BOOL)a3 outputForegroundMask:(id)a4 outputIsForeground:(id)a5 disparityMin:(float)a6 focusDisparity:(float)a7 hardness:(float)a8 minDistToDeweight:(float)a9 unconfidentWeight:(float)a10; - (void)renderContinuousWithSource:(const struct __CVBuffer { } *)a0 alpha:(const struct __CVBuffer { } *)a1 canonicalDisparity:(const struct __CVBuffer { } *)a2 disparityInFocus:(float)a3 focusCanonicalDisparity:(float)a4 fNumber:(float)a5 infConvolutionScale:(float)a6 noiseBits:(float)a7 disparityUpdateRate:(float)a8 focusThresholdHardness:(float)a9 cubeIntensity:(float)a10 usePostprocessedDisparity:(BOOL)a11 dstColor:(struct __CVBuffer { } *)a12 isFinalStage:(BOOL)a13 properties:(id)a14 callbackQueue:(id)a15 withCallback:(id /* block */)a16; - (void)encode420HybridDownsamplingToCommandBuffer:(id)a0 source:(struct __CVBuffer { } *)a1 destination:(struct __CVBuffer { } *)a2; - (id)disparityPostprocessingWithCanonicalDisparity:(const struct __CVBuffer { } *)a0 color:(const struct __CVBuffer { } *)a1 postProcessedDisparity:(struct __CVBuffer { } *)a2 staticParams:(const struct VideoMattingStaticParams { BOOL x0; unsigned int x1; unsigned int x2; unsigned int x3; unsigned int x4; unsigned int x5; unsigned int x6; int x7; int x8; unsigned int x9; float x10; float x11; float x12; float x13; float x14; float x15; float x16; float x17; float x18; float x19; float x20; unsigned int x21; unsigned int x22; int x23; float x24; float x25; float x26; float x27; } *)a3 dynamicParams:(const void *)a4 postProcessingParams:(const struct VideoPostprocessingParams { BOOL x0; float x1; BOOL x2; float x3; float x4; BOOL x5; } *)a5 facesArray:(id)a6 faceModel:(id)a7 isFinalStage:(BOOL)a8 callbackQueue:(id)a9 callback:(id /* block */)a10; - (id)getPTTextureFromLuma:(id)a0 chroma:(id)a1; - (void)encodeEdgeAwareFillToCommandBuffer:(id)a0 inputDisparity:(id)a1 inputDomainTransformX:(id)a2 inputDomainTransformY:(id)a3 outputDisparity:(id)a4; - (void)encodeColorSimToCommandBuffer:(id)a0 prevSource:(id)a1 currSource:(id)a2 destination:(id)a3 similarityScaleFactor:(float)a4; - (void)encode420ScalingByMPSToCommandBuffer:(id)a0 source:(struct __CVBuffer { } *)a1 destination:(struct __CVBuffer { } *)a2; - (void)encodeDiffusionMapToCommandBuffer:(id)a0 color:(id)a1 diffusionMap:(id)a2; - (void)setFgLut:(id)a0; - (void)prewarmGuidedFilter:(id)a0 device:(id)a1 commandBuffer:(id)a2 width:(int)a3 height:(int)a4 width2:(int)a5 height2:(int)a6; - (void)encodeFillBackgroundDisparityToCommandBuffer:(id)a0 inputDisparity:(id)a1 inputFacemask:(id)a2 outputDistanceFromKnownDisparity:(id)a3 outputDisparity:(id)a4 backgroundDisparityValue:(float)a5 minimumDistanceFromValidDisparity:(float)a6; - (struct pair<float, float> { float x0; float x1; })blurRadiusAndStdAtInfinityForFocalLength:(float)a0 focusCanonicalDisparity:(float)a1 fNumber:(float)a2 xResolution:(float)a3 useNewCoCFormula:(BOOL)a4; - (struct __CVBuffer { } *)createCVBufferWithWidth:(unsigned long long)a0 height:(unsigned long long)a1 format:(unsigned int)a2; - (void)setAlphaLut:(float)a0 gammaExponent:(float)a1; - (void)encodeOutputDisparityToCommandBuffer:(id)a0 inputDisparity:(id)a1 outputDisparity:(id)a2; - (id)initWithStaticParams:(const struct VideoMattingStaticParams { BOOL x0; unsigned int x1; unsigned int x2; unsigned int x3; unsigned int x4; unsigned int x5; unsigned int x6; int x7; int x8; unsigned int x9; float x10; float x11; float x12; float x13; float x14; float x15; float x16; float x17; float x18; float x19; float x20; unsigned int x21; unsigned int x22; int x23; float x24; float x25; float x26; float x27; } *)a0 renderingDisparityUpdateRate:(float)a1 renderingDisparityBlurRadius:(float)a2 renderingLensFocalLength_mm:(float)a3 useTemporalConfidence:(BOOL)a4 metalContext:(void *)a5 error:(id *)a6; - (void)encodeCopyTextureToCommandBuffer:(id)a0 inTexture:(id)a1 outTexture:(id)a2; @end