Stworzyłem odtwarzacz filmowy oparty na FFmpeg. To działa dobrze. Dekodowanie jest dość szybkie, na LG P970 (Cortex A8 z Neonem) mam średnią 70 fps przy strumieniu wideo o rozdzielczości 640 x 424, w tym konwersji YUV2RGB. Istnieje jednak jedno wąskie gardło. Rysuje na płótnie.Jak zwiększyć wydajność rysowania bitmap na Androidzie
Używam biblioteki natywnej jnigraphics do wypełniania obrazów w bitmapie w natywnej stronie, a następnie rysuję tę mapę bitową na płótnie w SurfaceView. Jest to dość proste i powszechne podejście, ale rysunek zajmuje 44 ms dla bitmapy z rozdzielczością 640 x 424, która redukuje fps do 23 i sprawia, że ta technika jest bezużyteczna ... Zajmuje znacznie więcej niż całe dekodowanie ramki A/V!
Czy istnieje metoda znacznie szybszego narysowania bitmap? Wolałbym renderować całkowicie w natywnym kodzie przy użyciu OpenGLES 2, ale przeczytałem też, że może to być slow. Co teraz? ...
Jak mogę renderować bitmapy tak szybko, jak to możliwe?
nie ma sposobu na uzyskanie dostępu do bufora SurfaceView bezpośrednio z natywnego kodu? Podgląd kamery robi to afaik. – zapl
AFAIK nie, przynajmniej nie ma standardowego sposobu korzystania z NDK. Oczywiście, możliwe jest połączenie ze źródłami Androida, ale powodowałoby to problemy z kompatybilnością ... – vitakot