2016-06-12 17 views
0

Ich versuche glReadPixels() mit EGL Dinge zu ersetzen, um es schneller zu machen.Nur eine bestimmte Anzeige Breite funktioniert, wenn GraphicBuffer (EGL) in Android NDK verwendet

Verweise auf this post, ich habe es erfolgreich in meinem Projekt funktioniert. Der Code von mir ist fast der gleiche mit diesem Post.

aber das Merkwürdige ist, - die Breite müssen einige spezifische Pixel sein, beispielsweise 384, 640, 720 , 1280 usw. Wenn die Breite ich nicht unter diesen gesetzt, wird das Bild tatsächlich erbrachten in einige andere Breite unter diesen, so würde verzerrt werden, wenn Anzeige mit cv :: Mat, etc.

Es sieht aus wie Android-System machen einige Einschränkungen der Breite von EGLImage. Leider bin ich nicht vertraut mit Android-Entwicklung ...

Wie das passiert? Wie man es repariert?

Vielen Dank im Voraus.

Antwort

0

Im Allgemeinen sind über gralloc zugewiesene Systemgrafikpuffer nicht portierbar; Gralloc-Zuordnungen sind so konzipiert, dass sie viele Systemspezifikationen handhaben, wie z. B. die Verwendung optimaler Speicherlayouts für eine effiziente Nutzung durch Video-/Grafik-/Display-Subsysteme. In einigen Fällen können Sie sogar sehr invasive Effekte wie die Framebuffer-Komprimierung erhalten.

Wenn ich raten musste, klingt es so, als würde man beim Lesen des Bildes in Ihrer Anwendung nicht in die Oberflächenreihenschritte einrechnen.

+0

Danke! Du hast recht. Es gibt ein 'getStride() 'in GraphicBuffer, das die tatsächliche Breite des Rendering-Puffers angibt. Überspringen Sie einfach die Polsterung am Ende jeder Reihe, dann funktioniert alles gut –