0

圧縮データをプロセスの別の部分に送信する圧縮コールバックを作成しようとしましたが、データを送信する行を配置すると、このエラーが返されます

インスタンス メンバー 'ptManager' はタイプ 'SampleHandler' では使用できません

コールバックのコードは次のとおりです。

let vtCallback : @convention(c) (UnsafeMutableRawPointer?, UnsafeMutableRawPointer?, OSStatus, VTEncodeInfoFlags, CMSampleBuffer?) -> Swift.Void =
    {
        (outputCallbackRefCon, sourceFrameRefCon, status, infoFlags, sampleBuffer) -> Swift.Void in
        
        let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer!)
        
        
        CVPixelBufferLockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
        CVPixelBufferLockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
        let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
        let height = CVPixelBufferGetHeight(imageBuffer!)
        let src_buff = CVPixelBufferGetBaseAddress(imageBuffer!)
        let data = NSData(bytes: src_buff, length: bytesPerRow * height)
        CVPixelBufferUnlockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
        
        NSLog("Size: " + String((data as Data).count))
        ptManager.sendObject(object: data, type: 102)
    }

これに対する他の解決策を見てきましたがptManager、静的に設定すると、解決するよりも多くの問題が発生し、=.

これに関するすべての助けをいただければ幸いです!

編集

これは、私が試した以前のコードの一部で、機能した可能性がありますが、コールバックに割り当てたときに呼び出されませんでした:

func compressionOutputCallback(
    outputCallbackRefCon:UnsafeMutableRawPointer?,
    sourceFrameRefCon:UnsafeMutableRawPointer?,
    status:OSStatus,
    infoFlags:VTEncodeInfoFlags,
    sampleBuffer:CMSampleBuffer) {
     let imageBuffer = CMSampleBufferGetImageBuffer(sampleBuffer)
    CVPixelBufferLockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
    CVPixelBufferLockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
     let bytesPerRow = CVPixelBufferGetBytesPerRow(imageBuffer!)
     let height = CVPixelBufferGetHeight(imageBuffer!)
     let src_buff = CVPixelBufferGetBaseAddress(imageBuffer!)
     let data = NSData(bytes: src_buff, length: bytesPerRow * height)
    CVPixelBufferUnlockBaseAddress(imageBuffer!, CVPixelBufferLockFlags(rawValue: 0))
    NSLog("Size: " + String((data as Data).count))
    ptManager.sendObject(object: data, type: 102)
     if status != noErr{
      NSLog("SBC: Error encoding video", status)
      print("SBC: Error encoding video", status)
       return
    }
    print("SBC: compressionOutputCallback dataBuffer", status)
  }
//Does not get called at all

編集2:

コールバックが使用されている場所は次のとおりです。

 VTCompressionSessionCreate(allocator: nil, width: 1080, height: 1920, codecType: kCMVideoCodecType_H264,encoderSpecification: nil, imageBufferAttributes: nil, compressedDataAllocator: nil, outputCallback: vtCallback as? VTCompressionOutputCallback, refcon: nil, compressionSessionOut: sessionOut)
4

0 に答える 0