iOS6: Verwendung der Konvertierungsfunktion von YUV in RGB von cvPixelBufferref in CImage

8

Ab iOS6 hat Apple die Bereitstellung von nativem YUV für CImage über diesen Aufruf vorgesehen.

  

initWithCVPixelBuffer: Optionen:

In der zentralen Anleitung zur Bildprogrammierung haben sie von dieser Funktion gesprochen

  

Nutzen Sie die Unterstützung für YUV-Image in iOS 6.0 und höher.   Kamera Pixel Puffer sind nativ YUV aber die meisten Bildbearbeitung   Algorithmen erwarten RBGA-Daten. Es gibt Kosten für die Konvertierung zwischen den   zwei. Core Image unterstützt das Lesen von YUB aus CVPixelBuffer-Objekten und   Anwenden der entsprechenden Farbumwandlung.

     

Optionen = @ {(ID) kCVPixelBufferPixelFormatTypeKey:       @ (kCVPixelFormatType_420YpCvCr88iPlanarFullRange)};

Aber ich kann es nicht richtig benutzen. Ich habe eine rohe YUV-Daten. Also, das ist was ich gemacht habe

%Vor%

Ich bekomme kein Bild. Irgendeine Idee, was ich vermisse.

BEARBEITEN:  Ich habe die Sperre hinzugefügt und die Basisadresse vor dem Anruf entsperrt. Außerdem habe ich die Daten des pixelpuffers gelöscht, um sicherzustellen, dass pixellbuffer die Daten festhält. Es scheint nur etwas mit dem Init-Aufruf falsch zu sein. Still CIImage-Objekt gibt Nil zurück.

%Vor%     
Rugger 08.11.2013, 04:21
quelle

2 Antworten

1

In der Konsole sollte eine Fehlermeldung angezeigt werden: initWithCVPixelBuffer failed because the CVPixelBufferRef is not IOSurface backed . In Apples Technischer Q & A QA1781 erfahren Sie, wie Sie eine IOSurface-unterstützte CVPixelBuffer erstellen. .

  

Der Aufruf von CVPixelBufferCreateWithBytes() oder CVPixelBufferCreateWithPlanarBytes() führt zu CVPixelBuffers , die nicht IOSurface-backed sind ...

     

... Dazu müssen Sie kCVPixelBufferIOSurfacePropertiesKey im Wörterbuch pixelBufferAttributes angeben, wenn Sie den Pixelpuffer mit CVPixelBufferCreate() erstellen.

%Vor%
  

Alternativ können Sie IOSurface-backed CVPixelBuffers mit CVPixelBufferPoolCreatePixelBuffer() aus einem vorhandenen Pixelpufferpool erstellen, wenn das pixelBufferAttributes -Wörterbuch, das für CVPixelBufferPoolCreate() bereitgestellt wird, kCVPixelBufferIOSurfacePropertiesKey enthält.

    
Quotation 28.10.2014 07:00
quelle
0

Ich arbeite an einem ähnlichen Problem und finde das gleiche Zitat von Apple ohne weitere Informationen darüber, wie man in einem YUV-Farbraum arbeitet. Ich stieß auf folgendes:

  

Standardmäßig wird in Core Image davon ausgegangen, dass es sich bei den Verarbeitungsknoten um RGB-Fließkommawerte mit 128 Bits pro Pixel, linearem Licht und vormultipliziertem RGBA handelt, die den Farbraum GenericRGB verwenden. Sie können einen anderen Arbeitsfarbraum angeben, indem Sie ein Quartz 2D CGColorSpace-Objekt bereitstellen. Beachten Sie, dass der Arbeitsfarbraum RGB-basiert sein muss. Wenn Sie YUV-Daten als Eingabe haben (oder andere Daten, die nicht RGB-basiert sind), können Sie ColorSync-Funktionen zum Konvertieren in den Arbeitsfarbraum verwenden. (Informationen zum Erstellen und Verwenden von CGColorspace-Objekten finden Sie unter Quartz 2D-Programmierhandbuch.)   Mit 8-Bit YUV 4: 2: 2-Quellen kann Core Image 240 HD-Layer pro Gigabyte verarbeiten. Acht Bit YUV ist das native Farbformat für Videoquellen wie DV, MPEG, unkomprimiertes D1 und JPEG. Sie müssen YUV-Farbräume in einen RGB-Farbraum für Core Image konvertieren.

Ich stelle fest, dass es keine YUV-Farbräume gibt, nur Grau und RGB; und ihre kalibrierten Cousins. Ich bin mir nicht sicher, wie ich den Farbraum noch konvertieren soll, werde aber hier sicher berichten, wenn ich es herausfinden sollte.

    
Buddhisthead 04.12.2014 00:05
quelle

Tags und Links