setOrientationHint dreht das Video gegen den Uhrzeigersinn bei einigen Frontkameras (HTC)

8

Das Problem: Bestimmte Android-Geräte (am Ende der Frage aufgeführt) weisen ein unerwartetes Verhalten auf, wenn sie die Funktion setOrientationHint(int degrees) für Videos verwenden, die mit der Frontkamera aufgenommen wurden. Das erwartete Verhalten ist, dass das Video im Uhrzeigersinn gedreht wird, aber diese Geräte drehen das Video gegen den Uhrzeigersinn.

Mein Ziel: Um eine Variable innerhalb der Kameraeinstellungen oder Hardware-Orientierungen zu identifizieren, kann ich vorhersagbar vorhersagen, wann dies geschehen wird. Insbesondere möchte ich vermeiden, dass diese Telefone in meinem Code ein spezielles Gehäuse haben!

Weitere Erklärung: Ich nehme Video mit dem Standardobjekt MediaRecorder auf, und bei der Vorbereitung für die Aufnahme lege ich die Ausrichtung des Videos mit setOrientationHint() . In der Dokumentation für setOrientationHint() wird Folgendes für den Parameter degrees angegeben:

  

Grad - der Winkel, der im Uhrzeigersinn in Grad gedreht werden soll. Die unterstützten Winkel sind   0, 90, 180 und 270.

Die Funktion soll eine Kompositionsmatrix hinzufügen, die den Drehwinkel enthält, damit ein Videoplayer das Video wie beabsichtigt anzeigen kann. Also, was ich tue ist, dass ich die Orientierung der Kamera-Hardware mit der CameraInfo class und verwende das als degrees -Parameter in setOrientationHint fn. (Ich habe versucht, eine Variation dieses Codes mit dem AOSP als Leitfaden, aber ich hatte genau das gleiche Ergebnis.)

Ein reales Beispiel: Die Frontkamera von Samsung Galaxy S3 (und tatsächlich die meisten anderen) wird eine Hardware-Ausrichtung von 270 haben, also verwende ich dies bei der Aufnahme und das resultierende Video ist korrekt angezeigt. Ein HTC Vivid wird in ähnlicher Weise eine Hardware-Orientierung von 270 für dieselbe Kamera zurückgeben, wird aber nur dann korrekt angezeigt, wenn ich 90 als degrees -Parameter in setOrientationHint fn verwende. Wenn ich das 270 der Hardware-Orientierung wie jedes andere Telefon verwende, wird das Video auf den Kopf gestellt.

Hinweis: Die Funktion setOrientationHint() enthält eine Warnung:

  

Beachten Sie, dass einige Videoplayer die Komposition möglicherweise ignorieren   Matrix in einem Video während der Wiedergabe.

Dies ist jedoch nicht was passiert, weil ich dieses Problem auf diesen Telefonen leicht beheben kann, wenn ich es vortäusche und 90 statt 270 einfüge.

Telefone, die ich speziell gesehen habe, zeigen dieses Problem: HTC Vivid (PH39100) mit Android 4.0.3, HTC EVO 4G (PG86100) mit Android 4.0.3, HTC Thunderbolt (ADR6400L) mit Android 2.3.4. Beachten Sie, dass es sich um HTC-Telefone handelt. Vielleicht hat sich jemand bei HTC im Uhrzeigersinn gegen den Uhrzeigersinn verwechselt.

    
Daniel Smith 07.02.2013, 23:37
quelle

1 Antwort

1

Ja, die HTC-Telefone drehen sich bei den nach vorne gerichteten Kameras in die falsche Richtung. Anstatt zu raten, fügte ich einen Einstellungsbildschirm hinzu, der zwei Bilder aufnehmen würde, wobei sich das zweite um 90 Grad drehen würde. Dann konnte der Benutzer als nächstes weiter schlagen, als ich durch die verschiedenen Kombinationen von Rotationsrichtung und -winkel radelte, bis beide Bilder auf die gleiche Weise ausgerichtet waren.

    
Jess Anders 05.03.2013 04:57
quelle