2012-01-27 11 views
13

Czy istnieje sposób na uzyskanie znacznika czasu, gdy przechwycono ramkę podglądu z aparatu Android?Znacznik czasu podglądu ramki na aparat z Androidem

  1. żadna metoda Kamera wraca znacznik czasu
  2. nie może uzyskać dostępu do kamery z natywnego kodu
  3. rozmiar bufora nie jest statyczna (w zależności od wielkości min podglądu nabytego od aparatu - kiedy i czy metoda jest i jeśli w kolejce jest więcej ramek, to są bufory podglądu, które są odrzucane.
  4. Szybkość klatek, która została ustawiona (ponownie, jeśli/kiedy metoda działa) jest tylko wskazówką dla systemu, kamera może zignorować wartość. To samo odnosi się do liczby klatek na sekundę, którą kamera powraca.

Wykonuję ciężkie przetwarzanie obrazu w czasie rzeczywistym, a małe błędy po ich dodaniu stanowią poważny problem.

+0

Czy odwołujesz się do wywołania zwrotnego onPreviewFrame, prawda? Powinny istnieć dane EXIF ​​w bajcie [], które zostanie przekazane, zakładając, że jest to przynajmniej JPEG. – michaelg

+0

O ile mogę powiedzieć, nie ma exif w danych, tylko surowy obraz – LambergaR

+0

Za brak EXIF: Nie jestem pewien, czy to zadziała, ale czy próbowałeś jawnie ustawić format podglądu do ImageFormat.jpeg? Format NV21 (domyślny) może nie mieć żadnego miejsca do przechowywania danych EXIF. –

Odpowiedz

4

Jedyny sposób, w jaki to zrobię, to użycie SurfaceTexture zamiast podglądu wywołania zwrotnego.

SurfaceTexture ma metodę getTimestamp(), która zwraca nanosekundy od jakiegoś nieokreślonego (ale stałego) czasu.

Niestety, SurfaceTexture jest teksturą zewnętrzną OpenGL, więc nie jest łatwo pracować z podglądem wywołania zwrotnego.

Z drugiej strony, jest znacznie bardziej wydajne dla procesora: wywołanie zwrotne podglądu powoduje konwersję kolorów i zmianę kształtu obrazu w oprogramowaniu, podczas gdy można użyć funkcji OpenGL ES2 do znacznego przetwarzania obrazu na GPU.

+0

Byłoby świetnie, ale jest jeden problem ... "Od: Poziom API 11" jest czymś, co nie jest tak szczęśliwy, gdy próbujesz wspierać starsze platformy :) – LambergaR

+0

Niestety, nie jestem tego świadomy jest możliwe w ogóle przed poziomem API 11. :( –

Powiązane problemy