aboutsummaryrefslogtreecommitdiff
path: root/Captura/Core Extensions/CVImageBuffer+cgImage.swift
blob: ba98855dbaca54c9ef77621b43bb7b5d05a91022 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
/*
 Copyright (C) 2024 Rubén Beltrán del Río

 This program is free software: you can redistribute it and/or modify
 it under the terms of the GNU General Public License as published by
 the Free Software Foundation, either version 3 of the License, or
 (at your option) any later version.

 This program is distributed in the hope that it will be useful,
 but WITHOUT ANY WARRANTY; without even the implied warranty of
 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 GNU General Public License for more details.

 You should have received a copy of the GNU General Public License
 along with this program. If not, see https://captura.tranquil.systems.
 */
import Foundation
import ReplayKit

extension CVImageBuffer {

  private static let contextQueue = DispatchQueue(label: "com.example.contextQueue")
  static let sharedContext: CIContext = {
    return CIContext()
  }()

  var cgImage: CGImage? {
    var result: CGImage?
    CVImageBuffer.contextQueue.sync {
      let ciImage = CIImage(cvImageBuffer: self)
      let width = CVPixelBufferGetWidth(self)
      let height = CVPixelBufferGetHeight(self)
      result = CVImageBuffer.sharedContext.createCGImage(
        ciImage, from: CGRect(x: 0, y: 0, width: width, height: height))
    }
    return result
  }
}