2

J'ai CVPixelBufferRef à partir d'un AVAsset. J'essaye d'appliquer un CIFilter à lui. J'utilise ces lignes:Système de coordonnées CoreImage

CVPixelBufferRef pixelBuffer = ... 
CVPixelBufferRef newPixelBuffer = // empty pixel buffer to fill 
CIContex *context = // CIContext created from EAGLContext 
CGAffineTransform preferredTransform = // AVAsset track preferred transform 
CIImage *phase1 = [CIImage imageWithCVPixelBuffer:pixelBuffer]; 
CIImage *phase2 = [phase1 imageByApplyingTransform:preferredTransform]; 
CIImage *phase3 = [self applyFiltersToImage:phase2]; 

[context render:phase3 toCVPixelBuffer:newPixelBuffer bounds:phase3.extent colorSpace:CGColorSpaceCreateDeviceRGB()]; 

Malheureusement, le résultat obtenu est incorrect. Par exemple, une vidéo capturée en mode portrait est à l'envers. Je suppose que le problème est en allant de AVAsset à CoreImage système de coordonnées (montrant un aperçu en XCode pour phase2 présente également un résultat incorrect). Comment le réparer?

+0

vous avez réussi à jamais comprendre comment fixer l'orientation des vidéos portrait? Je vois la même chose et je n'arrive pas à comprendre s'il y a simplement un paramètre à régler –

+0

C'était il y a quelque temps donc je ne m'en souviens pas exactement, mais je suppose que j'ai codé en dur comme vous l'avez fait dans votre réponse. –

Répondre

1

Je l'ai résolu en faisant cela, il devrait tout correctement orienter l'espace de coordonnées

var preferredTransform = inst.preferredTransform 
preferredTransform.b *= -1 
preferredTransform.c *= -1 

var outputImage = CIImage(cvPixelBuffer: videoFrameBuffer) 
        .applying(preferredTransform) 
outputImage = outputImage.applying(CGAffineTransform(translationX: -outputImage.extent.origin.x, y: -outputImage.extent.origin.y))