Как преобразовать буфер кадра BGRA в UIImage - PullRequest
1 голос
/ 08 марта 2019

В настоящее время я получаю эту ошибку при попытке запрограммировать приложение для iOS на просмотр кадра, отправленного через сокет TCP из программы Java с помощью usbmuxd на Mac.

2019-03-07 14:03:59.539127-0800 Dashboard[26848:9393967] [Unknown process name] copy_read_only: vm_copy failed: status 1.

В настоящее время я не знаюпочему происходит сбой, но строка, в которой происходит сбой, - это вызов UIImage.init внизу.

Любая помощь будет принята с благодарностью.

Код:

class ViewController: UIViewController {

    @IBOutlet weak var cameraView: UIImageView!

    func echoService(client: TCPClient) {
        print("New client from:\(client.address)[\(client.port)]")
        var d = client.read(1280 * 720 * 4)
        var image = self.imageFromSampleBuffer(sampleBuffer: d!)
        cameraView.image = image
        client.close()
    }

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let server = TCPServer(address: "127.0.0.1", port: 5000)
        switch server.listen() {
        case .success:
            while true {
                if var client = server.accept() {
                    echoService(client: client)
                } else {
                    print("accept error")
                }
            }
        case .failure(let error):
            print(error)
        }
    }

    func imageFromSampleBuffer(sampleBuffer : Any) -> UIImage
    {

        var inputBuffer = sampleBuffer

        // Create a device-dependent RGB color space
        let colorSpace = CGColorSpaceCreateDeviceRGB();

        // Create a bitmap graphics context with the sample buffer data
        var bitmapInfo: UInt32 = CGBitmapInfo.byteOrder32Big.rawValue
        bitmapInfo |= CGImageAlphaInfo.premultipliedLast.rawValue & CGBitmapInfo.alphaInfoMask.rawValue
        let context = CGContext(data: &inputBuffer, width: 1280, height: 720, bitsPerComponent: 8,
                                bytesPerRow: 1280 * 4, space: colorSpace, bitmapInfo: CGImageAlphaInfo.noneSkipFirst.rawValue);
        // Create a Quartz image from the pixel data in the bitmap graphics context
        let quartzImage = context!.makeImage();

        // Create an image object from the Quartz image
        let image = UIImage.init(cgImage: quartzImage!);

        return (image);
    }
}
...