Pracuję nad aplikacją, która zajmuje się przetwarzaniem obrazu w czasie rzeczywistym na ramkach kamer. Do tego używam metody wywołania zwrotnego podglądu onPreviewFrame
.
Działa to dobrze w przypadku aparatów obsługujących ramki podglądu o rozdzielczości co najmniej 640 x 480 lub większej. Ale gdy kamera nie obsługuje tak dużej rozdzielczości podglądu kamery, program jest zaprogramowany do odmowy przetwarzania takich ramek. Teraz mam problem z telefonami takimi jak Sony Xperia
Go. Jest to bardzo ładne urządzenie, które może nagrywać wideo do rozdzielczości 1280x720, ale niestety maksymalny rozmiar podglądu z kamery to 480x320, który jest zbyt mały dla moich potrzeb.Przetwarzanie ramek wideo z Androidem
Co chciałbym wiedzieć, jak uzyskać te larger camera frames
(do 1280x720 lub więcej)? Oczywiście musi to być możliwe, ponieważ aplikacja kamery ma możliwość nagrywania filmów w tej rozdzielczości - dlatego ta aplikacja musi w jakiś sposób mieć dostęp do większych ramek. Jak zrobić to samo z mojej aplikacji?
Aplikacja musi obsługiwać system Android 2.1 lub nowszy, ale byłbym bardzo szczęśliwy, nawet jeśli znajdę rozwiązanie dla mojego problemu tylko dla Androida 4.0 lub nowszego.
To pytanie jest podobna do http://stackoverflow.com/questions/8839109/processing-android-video-frame-by-frame-while-recording
, ale nie trzeba zapisać film - Ja tylko potrzebuję tych klatek wideo o wysokiej rozdzielczości ...
Dziękuję bardzo z góry!
Jeśli można przejść do SDK 11+ jest '' SurfaceTexture'' dostępne możesz użyć do podglądu kamery. A jeśli OpenGL wystarcza do przetwarzania obrazu, możesz zrobić zdjęcie, aby sprawdzić, czy podgląd oparty na SurfaceTexture ma wyższą rozdzielczość. – harism
Dobra uwaga. Pomyślałem, że Camera.Parameters.getSupportedPreviewSizes() zależy tylko od kamery, ale nie od powierzchni, na którą podglądany jest aparat. Spróbuję tego. Z drugiej strony, czy możliwy jest dostęp do kamery przez interfejs V4L2 (VideoForLinux2)? Może z V4L będę miał lepszą kontrolę nad kamerą ... – DoDo
Przede wszystkim należy wziąć pod uwagę, że onPreviewFrame daje obraz YUV (NV21), chyba że podasz inny format podglądu w obiekcie z kamerą. Z powodu braku metod w sdk dla Androida do pracy z tego rodzaju format, byłoby to ból w dupę. Ten format jest domyślny, więc jeśli chcesz mieć 100% kompatybilności ze wszystkimi urządzeniami, musisz nim zarządzać. Oczywiście możesz przekonwertować obrazek na bardziej zarządzalny format, ale jest to kosztowne pod względem wydajności, więc jeśli chcesz wiedzieć, że chcesz przetwarzać w czasie rzeczywistym, to będzie to dla Ciebie problem. – Mario