2016-05-06 6 views
0

Ich habe einige Probleme mit der Videoverarbeitung. Ich verwende Surface with Texture, um Videos mit MediaCodec und MediaMuxer zu verarbeiten (dekodieren, zuschneiden, mit schlechterer Qualität kodieren).
Und auf Mittelstufe, die beschneidet, habe ich Probleme. Im Grunde genommen möchte ich eine kleinere Dimension des Videos nehmen und dann basierend auf dieser Seite Offsets für eine größere Seite definieren und sie ausschneiden. Dann sollte das Ergebnis korrekt in 640x640 Quadrat skaliert werden. Ich habe ziemlich viel Zeit gesucht, aber alle Informationen, die ich gefunden habe, deuten darauf hin, dass Open GL das Bild selbst skalieren sollte. Ja, ich sollte zugeben, dass es etwas Maßstab macht, aber das Ergebnis sieht sehr hässlich aus, es scheint ziemlich "komprimiert" zu sein.
So, jetzt die Frage an sich. Kann mir jemand eine Erklärung oder vielleicht sogar Code-Snipet liefern, der die gewünschten Funktionen in Open GL ES erfüllt?
Ich habe bereits versucht, Viewport Gedanken anzupassen.Android, Open GL ES, Crop und Skala Textur

GLES20.glViewport(0, 0, 640, 640) 

UPDATE
Idee, dass Isogen74 haben mehr weniger vorgeschlagen für mich gearbeitet. Es ist immer noch ziemlich weit gestreckt, aber es ist besser als nichts.
Hier finden Sie den aktualisierten Code: OpenGL setup

Antwort

1

Zuschneiden - ändern Sie Ihre Texturkoordinaten, die Sie laden, wenn Sie die Textur laden; z.B. Wenn Sie die oberen und unteren 10% der Bildladung von (0,0, 0,1) auf (1,0, 0,9) beschneiden möchten.

Skalierung - die Antwort hängt davon ab, wie groß Ihr Downscale auf 640 * 640 ist. Die OpenGL-Filterung ist nicht dafür ausgelegt, große Verkleinerungsfaktoren direkt zu verarbeiten - es ist keine Bildverarbeitungsbibliothek - aber unter der Annahme relativ kleiner Skalierungsverhältnisse stellen Sie nur sicher, dass Sie die GL_LINEAR-Texturfilterung statt GL_NEAREST aktiviert haben.

Wenn Sie einen großen Downscale haben, müssen Sie möglicherweise zuerst die Textur mipmapen und GL_LINEAR_MIPMAP_NEAREST oder GL_LINEAR_MIPMAP_LINEAR als Ihren Minifikationsfilter, aber seien Sie sich bewusst, dass Ihnen dies nicht so gut ist wie beispielsweise eine korrekte Skalierung Algorithmus, den Sie möglicherweise in der Bildverarbeitungssoftware erhalten (z. B. bikubisch oder so ähnlich).

+0

Nun, diese Absenkung kann tatsächlich sehr groß sein. Original-Video kann in jeder Größe sein, ich habe versucht, in maximal verfügbaren Auflösung, die 1920x1080 war. Danke für die Hilfe, ich werde definitiv die Mipmap-Optionen ausprobieren (völlig vergessen) :) Außerdem würde ich lieber einige Bildverarbeitungsbibliotheken von Drittanbietern vermeiden, da dies die Verarbeitungszeit erheblich erhöhen wird. Mein Chef braucht Videoprozessing so schnell wie es überhaupt möglich ist und ich konnte Videoverarbeitung für 23 Sekunden bereitstellen, was in Ordnung ist und ich möchte es nicht erhöhen. –

Verwandte Themen