2016-03-27 15 views
3

Die kurze Frage ist: Was ist die Formel, um Pixelwerte in einem CVPixelBuffer zu adressieren?Wie adressiere ich die Pixel in einem CVPixelBuffer richtig?

Ich versuche, eine CVPixelBuffer in einem flachen Byte-Array zu konvertieren und bemerkte ein paar seltsame Dinge: Die CVPixelBuffer wird von einem CMSampleBuffer erhalten. Es ist Breite und Höhe 852x640 Pixel. In Summe 545280 Pixel, die 2181120 Bytes unter Berücksichtigung 4 Bytes pro Pixel erfordern würde.

Nun ist die erste seltsame Sache, dass das gleiche CVPixelBuffer3456 Bytes pro Zeile zurückgibt, die genug Platz für 864 Pixel ist. Woher kommen die zusätzlichen 12 Pixel? Wenn eine Zeile im endgültigen Bild nur 852 Pixel breit ist, aber es gibt tatsächlich 864 Pixel in einer Reihe von CVPixelBuffer, woher weiß ich, welche Bytes kopiert werden müssen? Oder welche dieser Bytes sind unbenutzt? Übrigens, sind sie nicht benutzt? Eine andere Sache ist die Datengröße berichtet CVPixelBuffers, die 2211848 Bytes ist. Wenn wir jetzt die 3456 Bytes pro Zeile mit 640 Zeilen multiplizieren, werden wir bei 2211840 Bytes enden. Also noch einmal, wir bleiben mit 8 zusätzlichen Bytes. Was ist los mit diesen 8 Bytes? Sind sie nicht benutzt? Sind sie am Ende?

Jeder Rat, der etwas Licht in diese Angelegenheit bringt, ist willkommen, Danke.

Antwort

2

Intern füllt Ihr CMSampleBuffer jede Zeile mit einem Vielfachen von 16 Bytes auf, so dass er Daten mit den internen 128-Bit breiten Registern des Prozessors effizient übertragen kann. Das ist meine Vermutung. Wenn Sie mit dem Parameter rowbytes auf die Pixeldaten und (x, y) im Bereich von (0,0) bis (851,639) zugreifen, sollten Sie nie ein Problem haben.