Ich habe einen Film-Player basierend auf FFmpeg erstellt. Es funktioniert gut. Die Decodierung ist ziemlich schnell, auf LG P970 (Cortex A8 mit Neon) habe ich durchschnittlich 70 fps mit 640 x 424 Auflösung Videostream inklusive YUV2RGB Konvertierung. Es gibt jedoch einen Engpass. Es ist auf Leinwand gezeichnet.Wie die Leistung der Bitmap-Zeichnung auf Android
Ich benutze jnigraphics native Bibliothek, um Bilddaten in die Bitmap auf der nativen Seite zu füllen, und dann zeichne ich diese Bitmap auf Canvas in SurfaceView. Es ist ein ziemlich einfacher und gebräuchlicher Ansatz, aber die Zeichnung benötigt 44 ms für Bitmap mit 640 x 424 Auflösung, was fps auf 23 reduziert und diese Technik unbrauchbar macht ... Es braucht viel mehr als die gesamte A/V-Frame-Decodierung!
Gibt es eine Methode, um Bitmaps deutlich schneller zu zeichnen? Ich würde es vorziehen, komplett im nativen Code mit OpenGLES 2 zu rendern, aber ich habe gelesen, dass es auch slow sein könnte. Was nun? ...
Wie kann ich Bitmaps so schnell wie möglich rendern?
Gibt es keine Möglichkeit, direkt von systemeigenem Code auf den Puffer von SurfaceView zuzugreifen? Camera Preview macht das afaik. – zapl
AFAIK nein, zumindest kein Standard Weg mit NDK. Natürlich ist es möglich, mit Android-Quellen zu verknüpfen, aber es würde Probleme mit der Kompatibilität verursachen ... – vitakot