zoukankan      html  css  js  c++  java
  • iOS CMSampleBuffer deep copy

    extension CVPixelBuffer {
        func copy() -> CVPixelBuffer {
            precondition(CFGetTypeID(self) == CVPixelBufferGetTypeID(), "copy() cannot be called on a non-CVPixelBuffer")
            
            var _copy : CVPixelBuffer?
            
    //        var BytesAlignment:Int = 4
    //        let CFBytesAlignment = CFNumberCreate(kCFAllocatorDefault, .intType, &BytesAlignment)!
            let attribute:[String:Any] = [kCVPixelBufferMetalCompatibilityKey as String:kCFBooleanTrue]
    //                                      kCVPixelBufferBytesPerRowAlignmentKey as String:CFBytesAlignment
            
            CVPixelBufferCreate(
                kCFAllocatorDefault,
                CVPixelBufferGetWidth(self),
                CVPixelBufferGetHeight(self),
                CVPixelBufferGetPixelFormatType(self),
                attribute as CFDictionary,
                &_copy)
            
            guard let copy = _copy else { fatalError() }
            
            CVPixelBufferLockBaseAddress(self, CVPixelBufferLockFlags.readOnly)
            CVPixelBufferLockBaseAddress(copy, CVPixelBufferLockFlags(rawValue: 0))
            
            for plane in 0..<CVPixelBufferGetPlaneCount(self) {
                let dest = CVPixelBufferGetBaseAddressOfPlane(copy, plane)
                let source = CVPixelBufferGetBaseAddressOfPlane(self, plane)
                let height = CVPixelBufferGetHeightOfPlane(self, plane)
                let bytesPerRow = CVPixelBufferGetBytesPerRowOfPlane(self, plane)
                
                let bytesPerRowDst = CVPixelBufferGetBytesPerRowOfPlane(copy, plane)
                
                for h in 0..<height {
                    memcpy(dest?.advanced(by:h*bytesPerRowDst), source?.advanced(by:h*bytesPerRow),  bytesPerRow)
                }
            }
            
            CVPixelBufferUnlockBaseAddress(copy, CVPixelBufferLockFlags(rawValue: 0))
            CVPixelBufferUnlockBaseAddress(self, CVPixelBufferLockFlags.readOnly)
            
            
            return copy
        }
    }

    https://stackoverflow.com/questions/38335365/pulling-data-from-a-cmsamplebuffer-in-order-to-create-a-deep-copy 

    http://blog.csdn.net/fernandowei/article/details/52180840

  • 相关阅读:
    10K+,深度学习论文、代码最全汇总!
    机器学习人气开源项目推荐
    目标检测入门
    论文 | YOLO(You Only Look Once)目标检测
    基于深度学习的「目标检测」算法综述
    皮卡丘检测器-CNN目标检测入门教程
    GitHub万星的ML算法面试大全
    物体检测之FPN及Mask R-CNN
    新型DenseBody框架:一张照片获得3D人体信息
    数据挖掘相关领域竞赛推荐
  • 原文地址:https://www.cnblogs.com/mlj318/p/7478920.html
Copyright © 2011-2022 走看看