     internal func uiimageFromSampleBuffer(sampleBuffer: CMSampleBuffer) -> UIImage? {
         var sampleBufferImage: UIImage? = nil
         if let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) {
-            if self.cicontext == nil {
+            if self._ciContext == nil {
                 if let device = MTLCreateSystemDefaultDevice() {
-                    self.cicontext = CIContext(mtlDevice: device)
+                    self._ciContext = CIContext(mtlDevice: device)
                 } else {
-                    self.cicontext = CIContext(eaglContext: EAGLContext(api: .openGLES2))
-                }
-            }
-            if let context = self.cicontext {
+                    self._ciContext = CIContext(eaglContext: EAGLContext(api: .openGLES2))
+                }
+            }
+            if let context = self._ciContext {
                 let ciimage = CIImage(cvPixelBuffer: pixelBuffer)
                 if let cgimage = context.createCGImage(ciimage, from: CGRect(x: 0, y: 0, width: CVPixelBufferGetWidth(pixelBuffer), height: CVPixelBufferGetHeight(pixelBuffer))) {
                     sampleBufferImage = UIImage(cgImage: cgimage)

    internal var _recordingSession: NextLevelSession?
    internal var _lastVideoFrameTimeInterval: TimeInterval
    
    internal var videoCustomContextRenderingEnabled: Bool
    internal var sessionVideoCustomContextImageBuffer: CVPixelBuffer?
    internal var cicontext: CIContext?
    
    // MARK: - singleton
    

    /// videoDelegate, func nextLevel(_ nextLevel: NextLevel, renderToCustomContextWithImageBuffer imageBuffer: CVPixelBuffer, onQueue queue: DispatchQueue)
    public var isVideoCustomContextRenderingEnabled: Bool {
        get {
            return self._videoCustomContextRenderingEnabled
        }
        set {
            self.executeClosureSyncOnSessionQueueIfNecessary {
                self._videoCustomContextRenderingEnabled = newValue
                self._sessionVideoCustomContextImageBuffer = nil
            }
        }
    }
